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);
}
}
}
精彩评论