0

Ich bin ein Anfänger bei diesem, also ertragen Sie mit mir.So erstellen Sie eine tolle Bitmap-Animation auf Android

Ich habe ein Bitmap-Bild, und ich möchte es animieren programmgesteuert.

Ich mag die Animation des Logos in dem Video "Indie Nation"

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

Weiter haben 00.20 sehen zu mögen.

Wie auch immer, hier ist, was ich verstehe, dass ich tun muss. Korrigiere mich, wenn ich falsch liege.

  1. Anwenden Transformationen für Ein- und Auszoomen
  2. Bewerben leicht es um
  3. bewegt

Ich plane, um ein Objekt zu machen, hat eine

public void draw(Canvas canvas) 

Methode Skalierung, die um spielen mit der Bitmap.

Muss ich auch eine Matrix verwenden, oder reicht es aus, die Leinwand direkt zu ändern?

Vielen Dank im Voraus! Bewerben

Antwort

1
  1. Skalierung für ein- und aus
  2. Transformationen Bewerben leicht es um

bewegen Ja, Ihr Verständnis korrekt ist.

Sie können die Matrix verwenden, um das erwartete Ergebnis wie unten gezeigt zu erzielen.

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