一晃就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;
}
尾声:一个碰壁的小球就这样诞生啦!!!啦啦啦,德玛西亚