0

我是初学者,所以请耐心等待。如何在Android上创建出色的位图动画

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

我想有徽标的动画视频中的“独立国家”

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

跳过喜欢0:20看。

无论如何,这是我明白我必须做的。纠正我,如果我错了。

  1. 应用比例为放大和缩小
  2. 应用转换为轻微各地

我打算做一个对象移动它,有一个

public void draw(Canvas canvas) 

方法,将发挥各地与位图。

另外,是否需要使用矩阵,还是足以直接修改画布?

在此先感谢!

回答

1
  1. 应用比例为放大和缩小
  2. 应用转换为轻微各地

是移动它,你的理解是正确的。

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

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); 
    } 
}