简单自定义动画的实现

        一晃就2018年了,还记得2012年的时候,快到12月12号是,我妈给我打电话,叫我多准备点蜡烛,说12号那天会黑一整天,我笑笑说不可能的事,我妈叫我准备点蜡烛,万一那天黑了呢。我呵呵的好笑,没办法,老年人有点迷信,然而,12号那天还是跟往常一样。想想没几天的事,却过了快7年了,有个词叫七年之痒,时间哟,过得可真快呀,所以要好好珍惜每一天,为了以后美好的家庭生活,我要好好的脚踏实地的挣钱!

        Windows7的屏保里有一个气泡的屏保,但那时一堆的气泡,我实现的只有一个气泡(呵呵哒),只是好玩而已,(嘻嘻嘻)首先看下效果图:


简单自定义动画的实现_第1张图片
碰壁气球

自定义是基础,就不细说了,实现思路是,每过一段时间,绘制一次,就实现了气球的碰壁效果。

实现过程

在onAttachedToWindow中初始化定时器,碰壁后会反弹,代码如下

 mTimer = new Timer();

        mTimer.schedule(new TimerTask() {

            @Override

            public void run() {

                mOriginWidth = mOriginWidth + (int) (10*mScaleX);

                mOriginHieght = mOriginHieght + (int) (10*mScaleY);


                //碰到左边

                if (mOriginWidth <= mBallRadius) {

                    mInitDirectionX = -mInitDirectionX;

                    mScaleX = mInitDirectionX / Math.sqrt(mInitDirectionX*mInitDirectionX + mInitDirectionY*mInitDirectionY);

                } else if (mOriginHieght <= mBallRadius) {//碰到上面

                    mInitDirectionY = -mInitDirectionY;

                    mScaleY = mInitDirectionY / Math.sqrt(mInitDirectionX*mInitDirectionX + mInitDirectionY*mInitDirectionY);

                } else if ((mOriginWidth + mBallRadius) >= mWidth) {//碰到右边

                    mInitDirectionX = -mInitDirectionX;

                    mScaleX = mInitDirectionX / Math.sqrt(mInitDirectionX*mInitDirectionX + mInitDirectionY*mInitDirectionY);

                } else if ((mOriginHieght + mBallRadius) >= mHieght) {//碰到下面

                    mInitDirectionY = -mInitDirectionY;

                    mScaleY = mInitDirectionY / Math.sqrt(mInitDirectionX*mInitDirectionX + mInitDirectionY*mInitDirectionY);

                }

                mHandler.sendEmptyMessage(1);

            }

        }, 0, 100);

然后通过Handler更新UI

 Handler mHandler = new Handler(){

        @Override

        public void handleMessage(Message msg) {

            switch (msg.what) {

                case 1:

                    invalidate();

                    break;

            }

        }

    };

最后通过onDraw绘制

canvas.drawCircle(mOriginWidth, mOriginHieght, mBallRadius, mPrintMoveBall);

退出后,在onDetachedFromWindow里将定时器关闭掉

if (mTimer !=null) {

    mTimer.cancel();

    mTimer =null;

}

尾声:一个碰壁的小球就这样诞生啦!!!啦啦啦,德玛西亚

你可能感兴趣的:(简单自定义动画的实现)