??????? 一晃就2018年了理逊,還記得2012年的時(shí)候,快到12月12號(hào)是盒揉,我媽給我打電話晋被,叫我多準(zhǔn)備點(diǎn)蠟燭,說(shuō)12號(hào)那天會(huì)黑一整天刚盈,我笑笑說(shuō)不可能的事羡洛,我媽叫我準(zhǔn)備點(diǎn)蠟燭,萬(wàn)一那天黑了呢藕漱。我呵呵的好笑欲侮,沒(méi)辦法,老年人有點(diǎn)迷信肋联,然而威蕉,12號(hào)那天還是跟往常一樣。想想沒(méi)幾天的事橄仍,卻過(guò)了快7年了韧涨,有個(gè)詞叫七年之癢,時(shí)間喲沙兰,過(guò)得可真快呀氓奈,所以要好好珍惜每一天,為了以后美好的家庭生活鼎天,我要好好的腳踏實(shí)地的掙錢(qián)!
??????? Windows7的屏保里有一個(gè)氣泡的屏保暑竟,但那時(shí)一堆的氣泡斋射,我實(shí)現(xiàn)的只有一個(gè)氣泡(呵呵噠),只是好玩而已但荤,(嘻嘻嘻)首先看下效果圖:
自定義是基礎(chǔ)罗岖,就不細(xì)說(shuō)了,實(shí)現(xiàn)思路是腹躁,每過(guò)一段時(shí)間桑包,繪制一次,就實(shí)現(xiàn)了氣球的碰壁效果纺非。
實(shí)現(xiàn)過(guò)程
在onAttachedToWindow中初始化定時(shí)器哑了,碰壁后會(huì)反彈赘方,代碼如下
?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);
然后通過(guò)Handler更新UI
?Handler mHandler = new Handler(){
? ? ? ? @Override
? ? ? ? public void handleMessage(Message msg) {
? ? ? ? ? ? switch (msg.what) {
? ? ? ? ? ? ? ? case 1:
? ? ? ? ? ? ? ? ? ? invalidate();
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? };
最后通過(guò)onDraw繪制
canvas.drawCircle(mOriginWidth, mOriginHieght, mBallRadius, mPrintMoveBall);
退出后,在onDetachedFromWindow里將定時(shí)器關(guān)閉掉
if (mTimer !=null) {
??? mTimer.cancel();
? ? mTimer =null;
}
尾聲:一個(gè)碰壁的小球就這樣誕生啦H踝蟆U浮!啦啦啦拆火,德瑪西亞