我有一个扩展View
的类,我在onDraw()
方法的画布中绘制了我需要的所有内容,如下所示:
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);
}
}
如何在此处制作动画(补间动画)?
答案 0 :(得分:7)
您无法在另一个类的ImageView
方法中绘制onDraw()
。
这可能是你所追求的更多。
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);
}
}
}