开发者

Tween animation on a Canvas in a custom View

开发者 https://www.devze.com 2023-02-10 02:59 出处:网络
I have a class that extends View, and I draw everything I need inside开发者_C百科 its canvas in the onDraw() method, something like this:

I have a class that extends View, and I draw everything I need inside开发者_C百科 its canvas in the onDraw() method, something like this:

protected void onDraw(Canvas canvas) {
        synchronized (this) {
                float h = mHeight;
                float w = mWidth;

                canvas.drawColor(Color.WHITE);

                float roadLine= (85.0f/100.0f)*h;

                canvas.drawBitmap(mTop, 0, roadLine-mTop.getHeight(), null);

                //this is what I'd like to animate
                canvas.drawBitmap(mSmoke);

        }
    }

How do I make an Animation (tween animation) draw in here?


You can't draw an ImageView inside the onDraw() method of another class.

This is probably more what you're after.

public class SimpleAnimation extends Activity {

Sprite sprite;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    sprite = new Sprite(this);
    setContentView(sprite);
}

class Sprite extends ImageView {

    Bitmap bitmap;
    Paint paint;
    RotateAnimation rotate;
    AlphaAnimation blend;
    ScaleAnimation scale;
    AnimationSet spriteAnimation;

    float centerX;
    float centerY;
    float offsetX;
    float offsetY;

    public Sprite(Context context) {
        super(context);

        bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
        offsetX = bitmap.getWidth() / 2;
        offsetY = bitmap.getHeight() / 2;

        paint = new Paint();
        paint.setAntiAlias(true);
        paint.setFilterBitmap(true);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        if (spriteAnimation == null) {
            centerX = canvas.getWidth() / 2;
            centerY = canvas.getHeight() / 2;
            createAnimation(canvas);
        }
        canvas.drawBitmap(bitmap, centerX - offsetX, centerY - offsetY, paint);
    }

    private void createAnimation(final Canvas canvas) {

        rotate = new RotateAnimation(0, 360, centerX, centerY);
        rotate.setRepeatMode(Animation.REVERSE);
        rotate.setRepeatCount(Animation.INFINITE);
        scale = new ScaleAnimation(0, 2, 0, 2, centerX, centerY);
        scale.setRepeatMode(Animation.REVERSE);
        scale.setRepeatCount(Animation.INFINITE);
        scale.setInterpolator(new AccelerateDecelerateInterpolator());

        spriteAnimation = new AnimationSet(true);
        spriteAnimation.addAnimation(rotate);
        spriteAnimation.addAnimation(scale);
        spriteAnimation.setDuration(10000L);

        startAnimation(spriteAnimation);

    }
  }
}
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号