我有一个扩展View的类,我在onDraw()方法的画布中绘制了我需要的所有内容,如下所示: protected void onDraw(Canvas canvas) { synchronized (this) { float h = mHeight; float w = mWidth; canvas.drawColor(Color.WHITE);
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); } }
如何在此处制作动画(补间动画)?
您无法在另一个类的onDraw()方法中绘制ImageView.这可能是你所追求的更多.
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); } } }