3 Stimmen

wie man eine Android-Bildanimation durchführt

Ich versuche, eine einfache Bild-Animation gehen zu bekommen. Ich möchte es sieht aus, als ob der Hubschrauber Propellerblätter drehen. Ich habe 3 Bilder für den Hubschrauber, und ich zeige eines dieser Bilder in Abhängigkeit von der Animation Fortschritt. das Problem ist, dass alle drei Bilder am Ende überlappen einander im Gegensatz zu nur ein Bild zeigt auf einmal, wodurch die Animation. dies ist, was ich bisher getan habe, ich habe sogar versucht, Leinwand zu löschen, indem Sie diese canvas.drawColor(Color.BLACK), aber das würde löschen Sie die gesamte Leinwand, die nicht das ist, was ich will.

Das ist, was ich habe:

1) in der Klasse View:

static class Hubschrauber { private long mLastUpdate; private long mFortschritt = 0; private final float mX; private final float mY;

    private final Bitmap mHelicopter1;
    private final Bitmap mHelicopter2;
    private final Bitmap mHelicopter3;
    private final float mRadius;

    Helicopter(long mLastUpdate, float mX, float mY,
              Bitmap helicopter1, Bitmap helicopter2, Bitmap helicopter3) {
        this.mLastUpdate = mLastUpdate;
        this.mX = mX;
        this.mY = mY;
        this.mHelicopter1 = helicopter1;
        this.mHelicopter2 = helicopter2;
        this.mHelicopter3 = helicopter3;
        mRadius = ((float) mHelicopter1.getWidth()) / 2f;

    }

    public void update(long now) {
        mProgress += (now - mLastUpdate);

        if(mProgress >= 400L)
        {
         mProgress = 0;
        }
        mLastUpdate = now;
    }

    public void setNow(long now) {
        mLastUpdate = now;
    }

    public void draw(Canvas canvas, Paint paint) 
    {       

        if (mProgress < 150L) 
        {
            canvas.drawBitmap(mHelicopter1, mX - mRadius, mY - mRadius, paint);
        } 
        else if (mProgress < 300L) 
        {
            canvas.drawBitmap(mHelicopter2, mX - mRadius, mY - mRadius, paint);

        } 
        else if(mProgress < 400L)
        {
         canvas.drawBitmap(mHelicopter3, mX - mRadius, mY - mRadius, paint);
        }

    }

    public boolean done() {
        return mProgress > 700L;
    }
}

private ArrayList<Helicopter> mHelicopters = new ArrayList<Helicopter>();

2) dies wird in der run() eines Threads aufgerufen:

private void doDraw(Canvas canvas) 
    {
     final long now = SystemClock.elapsedRealtime();

        canvas.save();

        for (int i = 0; i < mHelicopters.size(); i++) {
            final Helicopter explosion = mHelicopters.get(i);
            explosion.update(now);
        }

        for (int i = 0; i < mHelicopters.size(); i++) {
            final Helicopter explosion = mHelicopters.get(i);
            explosion.draw(canvas, mPaint);
        }

        canvas.restore();
    }

kann mir jemand helfen? ich habe mir viele beispiele im internet zum thema animation angesehen, sie scheinen immer text zu beinhalten, aber keine bilder. danke.

1voto

methodin Punkte 6621

Normalerweise zeichnet der Thread, der die Leinwand zeichnet, die gesamte Leinwand und alle Requisiten/Akteure neu. Wenn Sie also den Index eines Hubschrauberblattes erhöhen, wird es an Ort und Stelle gezeichnet, nachdem der Rest der Leinwand neu gezeichnet wurde. Etwa so: Hintergrund->Helikopter->Blatt1 nächste Iteration Hintergrund->Helikopter->Blatt2.

1voto

Patrick Ferreira Punkte 1941

Es ist vielleicht spät, aber die Antwort scheint da zu sein: http://developer.Android.com/guide/topics/graphics/2d-graphics.html#frame-animation

1voto

bkurzius Punkte 4008

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X