как сделать анимацию изображения Android - PullRequest
3 голосов
/ 23 апреля 2010

Я пытаюсь запустить простую анимацию изображений. Я хочу, чтобы все выглядело так, как будто лопасти винта вертолета вращаются. У меня есть 3 изображения для вертолета, и я показываю одно из этих изображений в зависимости от прогресса анимации. проблема заключается в том, что все три изображения перекрывают друг друга, а не только одно изображение, появляющееся одновременно, создавая анимацию. это то, что я делал до сих пор, я даже пытался очистить холст, используя этот canvas.drawColor (Color.BLACK), но это очистило бы весь холст, а это не то, что я хочу.

вот что у меня есть:

1) в классе просмотра:

статический класс Helicopter { приватное длинное mlastUpdate; приватный длинный mProgress = 0; закрытый финал поплавок mX; закрытый финал 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) это вызывается в run () потока:

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

Может кто-нибудь мне помочь? Я просмотрел множество примеров в Интернете по анимации, они, кажется, всегда включают текст, но не изображения. спасибо.

Ответы [ 3 ]

1 голос
/ 21 декабря 2010

Возможно, уже поздно, но ответ, кажется, здесь: http://developer.android.com/guide/topics/graphics/2d-graphics.html#frame-animation

1 голос
/ 19 февраля 2013

Последняя документация может быть здесь:

http://developer.android.com/guide/topics/graphics/drawable-animation.html

1 голос
/ 02 сентября 2010

Обычно нить, которая рисует холст, перерисовывает весь холст и все реквизиты / актеры. Таким образом, если вы увеличиваете индекс изображения лопасти вертолета, он будет нарисован на месте после перерисовки остальной части холста. Примерно так: Фон-> Вертолет-> Blade1 Следующая итерация Фон-> Вертолет-> Blade2.

...