速读原著-Android应用开发入门教程(动画效果)

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,然后实现直接绘制的工作。

发布了1049 篇原创文章 · 获赞 868 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_42528266/article/details/103971770