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