0

私はこれで初心者ですので、ご一緒ください。Androidで素晴らしいビットマップアニメーションを作成するには

私はビットマップイメージを持っており、というプログラムでをアニメートしたいと考えています。私はビデオ「インディー国家」にロゴのアニメーションを持ちたい

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

は見るために午後12時20分を好きにスキップします。

とにかく、ここに私がしなければならないことが分かっています。私が間違っているなら、私を訂正してください。

  1. は少し周り

私の周りに再生されます

public void draw(Canvas canvas) 

方法を持って、オブジェクトを作成することを計画し、それを移動するための変換を適用します

  • にズームインやズームアウトのスケーリングの適用しますビットマップを使用します。

    また、マトリックスを使用する必要がありますか、キャンバスを直接変更するだけで十分ですか?

    ありがとうございます!

  • 答えて

    1
    1. 少し周り

    はい、ご理解が正しいか、それを移動するための変換を適用します

  • にズームインやズームアウトのスケーリング適用します。

    matrixを使用すると、次のような結果が得られます。

    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); 
        } 
    } 
    
  • 関連する問題