9.7 动画效果
Android 中可以容易地实现绘制的动画效果。
参考示例程序:ApiDemo 的 AnimateDrawables(ApiDemo=>Graphics=>AnimateDrawables)
源代码:android/apis/graphics/ AnimateDrawables.java
AnimateDrawables
程序的运行结果如图所示:
核心的代码部分如下所示:
private static class SampleView extends View {
private AnimateDrawable mDrawable;
public SampleView(Context context) {
super(context);
setFocusable(true);
setFocusableInTouchMode(true);
Drawable dr = context.getResources().getDrawable(R.drawable.beach);
dr.setBounds(0, 0, dr.getIntrinsicWidth(), dr.getIntrinsicHeight());
Animation an = new TranslateAnimation(0, 100, 0, 200); // 创建一个动画
an.setDuration(2000); // 持续时间
an.setRepeatCount(-1);
an.initialize(10, 10, 10, 10);
mDrawable = new AnimateDrawable(dr, an); // 创建 Drawable
an.startNow();
}
@Override protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
mDrawable.draw(canvas); // 通过 Drawable 进行绘制
invalidate();
}
}
本例子中使用 TranslateAnimation 是使用了位置变化的动画效果。android.view.animation
包中的 Animation 类表示了一个动画效果,它有几个继承者:TranslateAnimation(位置动画)、RotateAnimation(旋转动画)、ScaleAnimation(缩放动画)、AlphaAnimation(透明度动画)、AnimationSet(动画组)。
AnimationDrawable 是 Drawable 的一个继承者,其中包含了几个主要的方法:
Canvas beginRecording(int width, int height)
void endRecording()
void draw(Canvas canvas)
void writeToStream(OutputStream stream)
通过 AnimationDrawable,可以将 Animation 类转化成 Drawable,然后实现直接绘制的工作。