读书人

分析android卡通片模块

发布时间: 2012-06-30 17:20:13 作者: rapoo

分析android动画模块

主要思路

Tween 动画序列图

使用样例

下面的代码是一个 view,系统创建 view 时会调用 onCreate 方法,该方法定义了一个 TranslateAniamtion,指定了移动起点和终点,动画持续时间为 1s,最后调用 startAnimation 将该动画保存在 View 的成员 mCurrentAnianmtion 中并启动动画。

注意,在 View 中需要定义成员变量 mCurrentAnimation 和 mTransformation ,分别记录当前的动画和变换。另外需要定义成员函数 startAnimation 启动动画。

class MyView extends View {    Animation mCurrentAnimation  = null;    Transformation mTransformation = new Transformation;    private void setAnimation(Animation animation) {        mCurrentAnimation = animation;        if (animation != null) {            animation.reset();        }    }    public void startAnimation(Animation animation) {        animation.setStartTime(animation.START_ON_FIRST_FRAME);        setAnimation(animation);        invalidate();    }    onDraw (Canvas canvas) {        long curTime = SystemClock.uptimeMillis ();        if (mCurrentAniamtion == null){            canvas.drawBitmap (b, x, y, mPaint);        }        else {            if (!mCurrentAnimation.isInitialized())  //initialize animation                mCurrentAnimation.initialize (w, h, pw, ph);            boolean more = mCurrentAnimation.getTransformation (curTime, mTransformation);            if(more) {                Matrix m = canvas.getMatrix();                canvas.setMatrix (mTransformation.getMatrix());                canvas.drawBitmap (b, x, y, mPaint);                canvas.setMatrix (m);                this.invalidate ();            }            else {                mCurrentAnimation = null;                this.invalidate ();            }        }    }    void onCreate (){        Animation anim = new TranslateAnimation (10, 20, 0, 0);        anim.setDuration (1000); // 1s        anim.setInterpolator (new AcceleratInterpolator(3.0f));        startAniamtion (anim);    }}

读书人网 >Android

热点推荐