如何在 Android 上创建很棒的位图动画

How to create an awesome bitmap animation on Android

我是这方面的初学者,请多多包涵。

我有一个位图图像,我想以编程方式为它制作动画

我想在视频中有logo的动画效果"Indie Nation"

https://www.youtube.com/watch?v=yRU2rU2k_NI

跳转点赞0:20查看

无论如何,这就是我所知道的我必须做的事情。如果我错了请纠正我。

  1. 应用缩放比例进行放大和缩小
  2. 应用变换稍微移动它

我打算做一个对象,有一个

 public void draw(Canvas canvas)

将使用位图的方法。

另外,我需要使用矩阵,还是直接修改canvas就足够了?

提前致谢!

  1. Apply scaling for zooming in and out
  2. Apply transformations for slightly moving it around

是的,你的理解是正确的。

您可以使用矩阵来实现如下所示的预期结果。

public class LogoView extends View {
    public LogoView(Context context) {
        super(context);
        init();
    }

    public LogoView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public LogoView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        logo = BitmapFactory.decodeResource(getResources(), R.drawable.logo);
        logoLeft = -logo.getWidth() >> 1;
        logTop = -logo.getHeight() >> 1;
        matrix = new Matrix();
    }

    private Bitmap logo;
    private Matrix matrix;
    private float logoLeft, logTop;

    private float SCALE_FACTOR = 0.07f;
    private float TRANSLATE_FACTOR = 0.03f;

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        matrix.reset();
        matrix.setTranslate(getWidth() >> 1, getHeight() >> 1);
        canvas.setMatrix(matrix);
        float scaleFactor = (float) (Math.random() * SCALE_FACTOR) + 1.f;
        canvas.scale(scaleFactor, scaleFactor);
        float dx = (float) ((Math.random() - 0.5) * TRANSLATE_FACTOR) * logo.getWidth();
        float dy = (float) ((Math.random() - 0.5) * TRANSLATE_FACTOR) * logo.getHeight();
        canvas.translate(dx, dy);
        canvas.drawBitmap(logo, logoLeft, logTop, null);
        postInvalidateDelayed(150);
    }
}