美文网首页
简单自定义动画的实现

简单自定义动画的实现

作者: VerseWang | 来源:发表于2018-01-10 20:08 被阅读0次

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

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

    碰壁气球

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

    实现过程

    在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;

    }

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

    相关文章

      网友评论

          本文标题:简单自定义动画的实现

          本文链接:https://www.haomeiwen.com/subject/elwonxtx.html