android - 动画 ImageView 的位图位置

标签 android bitmap android-drawable android-bitmap

我有一个 width = 1080height = 1920

的 ImageView

我有一个宽度 = 3340高度 = 1920

的位图

我将imageView的缩放类型设置为MATRIX。这样位图就不会缩放到imageView

    imageView.setScaleType(ImageView.ScaleType.MATRIX);

我想从左到右为位图设置动画,反之亦然。

可以实现吗?有什么想法吗?

最佳答案

请在您的项目中创建以下自定义 View 类

package com.company.xyz;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;

/**
 * Created by rohitp on 12/10/2015.
 */
public class CustomImageView extends View {

    Bitmap bm;
    int x, y;
    boolean flag = true;

    public CustomImageView(Context context) {
        super(context);
    }

    public CustomImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        try{
            int src_resource = attrs.getAttributeResourceValue("http://schemas.android.com/apk/res/android", "src", 0);
            bm = getDrawable(getResources(),src_resource);
        }catch (Exception e){

        }
    }

    public static Bitmap getDrawable(Resources res, int id){
        return BitmapFactory.decodeResource(res, id);
    }

    public void setBm(Bitmap bm) {
        this.bm = bm;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);

        if(bm != null){
            if(flag){
                if (x < (getMeasuredWidth()-bm.getWidth())) {
                    x += 10;
                    Log.e("Custom",x+""+getMeasuredWidth());
                }
                else {
                    Log.e("Custom",x+" false");
                    flag = false;
                }
            }else{
                if (x >0 ) {
                    x -= 10;
                    Log.e("Custom",x+" -");
                }
                else {
                    flag = true;
                    Log.e("Custom",x+" true");
                }
            }


            canvas.drawBitmap(bm, x, y, new Paint());
        }
        invalidate();//calls this method again and again
    }
}

使用以下内容创建布局 xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.company.xyz.CustomImageView
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:id="@+id/animate_pic"
        android:src="@drawable/test">
    </com.company.xyz.CustomImageView>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button"
        android:layout_gravity="bottom"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

并且您还可以在运行时通过代码更改位图

((CustomImageView) findViewById(R.id.animate_pic)).setBm(bm)

关于android - 动画 ImageView 的位图位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34201790/

相关文章:

java - Android Material Design - 添加样式时出错

android - 在集成测试中途遇到 LinearAlloc 溢出

java - 通过字符串引用id android

c++ - 从原始字节创建 bmp 文件的可移植函数?

android - Canvas 上的可绘制图像

java - 如何从服务检索偏好数据

android - 如何检查在第二个 EditText 中输入的值在 Android 中是否较小

java - Bitmap.createBitmap 内存不足错误 java

android - 以 selectableItemBackground 作为背景的形状可绘制对象

Android放大中心颜色渐变