【问题标题】:how to do android image animation如何做android图像动画
【发布时间】:2010-04-23 04:53:18
【问题描述】:

我正在尝试制作一个简单的图像动画。我想让它看起来好像直升机的螺旋桨叶片在转动。我有 3 张直升机图像,我根据动画进度显示其中一张图像。问题是所有三个图像最终都相互重叠,而不是一次只显示一个图像,从而创建动画。这是我到目前为止所做的,我什至尝试通过执行此 canvas.drawColor(Color.BLACK) 来清除画布,但这会清除整个画布,这不是我想要的。

这就是我所拥有的:

1) 在视图类中:

静态类直升机{ 私人长mLastUpdate; 私人长 mProgress = 0; 私有最终浮点 mX; 私有最终浮点数;

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

有人可以帮助我吗?我在网上看过很多关于动画的例子,它们似乎总是涉及文本,而不是图像。谢谢。

【问题讨论】:

    标签: android android-animation


    【解决方案1】:

    通常,绘制画布的线程会重绘整个画布和所有道具/演员。这样,如果您增加直升机叶片图像索引,它将在画布的其余部分重新绘制后绘制到位。类似于:Background->Helicopter->Blade1 next iteration Background->Helicopter->Blade2。

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-03
          • 1970-01-01
          • 2023-03-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多