首先控制火箭的移動範圍,top,bottom,left,right的邊界值隨你設定,但是火箭的移動範圍必須在發射線之上,但是有一點很重要,火箭必須移動到發射線之下才會引起貝塞爾曲線的彎曲,所以火箭的移動範圍也必須在發射線之下有一部分區域! 此處在下面的技術實現控制火箭的範圍會繼續說到! 既然火箭隨著你的手移動,所以必須重寫ontouchevent(),在action_down中,獲取實時的手在螢幕上的座標,在action_up中,實現火箭的上公升動畫,顯示出」火箭發射成功」的文字
int widthmode = measurespec.getmode(widthmeasurespec);
int heightmode = measurespec.getmode(heightmeasurespec);
int widthsize = measurespec.getsize(widthmeasurespec);
int heightsize = measurespec.getsize(heightmeasurespec);
int width, height;
//如果布局中設定view的寬度為固定值,那麼布局的寬度就取固定值,如果設定為match_parent,那就是取父布局大小
if (widthmode == measurespec.exactly) else
//如果布局中設定view的高度為固定值,那麼布局的高度就取固定值,如果設定為match_parent,那就是取父布局大小
if (heightmode == measurespec.exactly) else
mwidth = width;
mheight = height;
mxcurrent = mwidth / 2;
mycurrent = mheight / 2;
setmeasureddimension(width, height);
注釋寫得很清楚了,主要是對使用者在xml檔案中對layout_width和layout_height為wrap_content進行處理
width是控制項的寬度,height控制項的高度,mxcurrent,mycurrent是在ontouchevent()action為 motionevent.action_move 時拿到的x與y座標
//設定火箭的繪製風格
mpaint.setstyle(paint.style
.stroke);
mpaint.setstrokewidth(5);
mpaint.setcolor(color.blue);
mpaint.setantialias(true);
//控制火箭的移動範圍
紅色區域上火箭的移動範圍,根據理解上面的** 就很好理解了,大的紅色區域下邊框的黑線(其實是跟紅色線重疊的,為了區分沒有畫重疊)是發射台,這些數字為刻度,跟**中的幾分之幾是一致的! 當火箭移動到下面小的紅色區域中貝塞爾曲線就會彎曲!
mpath.moveto(mxcurrent, mycurrent);
mpath.lineto(mxcurrent + 50, mycurrent);
mpath.lineto(mxcurrent + 50, mycurrent - 150);
mpath.moveto(mxcurrent,mycurrent - 150);
mpath.lineto(mxcurrent,mycurrent);
mpath.moveto(mxcurrent - 25, mycurrent - 150);
mpath.lineto(mxcurrent + 75,mycurrent - 150);
mpath.lineto(mxcurrent + 25,mycurrent - 250);
mpath.lineto(mxcurrent - 25,mycurrent - 150);
canvas.drawpath(mpath, mpaint);
這快沒什麼要說的,但是我在繪製的時候,也是除錯了好多次才成功的,這個繪製是在不行就畫座標來找每個點的座標,然後連線起來就完事了,細心點沒問題
//繪製發射台(貝塞爾曲線)
mpaint.setstrokewidth(10);
mpath.reset();
mpath.moveto(mwidth * 1 / 10, mheight * 7 / 10);
//當火箭移動到指定的位置時才會引起發射台彎曲,這裡進行判斷
if (mycurrent > mheight * 7 / 10 && mxcurrent > mwidth * 4 / 10 && mxcurrent < mwidth * 6 / 10) else
marcwidth = mxcurrent * 5 / 10
; mpath.quadto(marcwidth, marcheight, mwidth * 9 / 10, mheight * 7 / 10);
canvas.drawpath(mpath, mpaint);
這裡繪製發射台(就是一條直線),在marcheight的取值上做一下判斷,如果火箭(mycurrent的值)移動到發射台之下而且在控制項寬度的十分之四和十分之六位置之間,就引起貝塞爾曲線的彎曲(應該是這麼描述吧?)
//繪製發射成功後的文字
mpaint.reset();
if (missuccess && mycurrent < 0)
@override
public boolean ontouchevent(motionevent event)
break;
}return
true;
}private
void
startanim()
});manimset.setduration(1200);
manimset.play(animator);
manimset.start();
missuccess = true;
}
Qt實現360安全衛士換膚功能
效果如下 問題 標題的換膚背景未顯示出來 要實現換膚功能,我們先建立乙個基於drop shadow widget的護膚介面,我們將換膚介面分為上中下三部分。drop shadow widget的功能一會說 pragma once include push button.h include chang...
解除安裝360安全衛士帶來的悲劇
然後不用說直接度娘 找相關解決方案 解決方案1 我試了對我不起作用。解決方案2 我試了 可以,但是要修改資料庫連線串為格式,但這樣也不符合我的要求,我不能該成這種格式。後來我又仔細想了下這幾天我到底做了什麼操作而導致目前情況。貌似也就是解除安裝了360安全衛士,而且解除安裝後還出現win7開機帶滑鼠...
Qt之實現360安全衛士主介面 一
該博文只是模仿360安全衛士的主介面,並不牽涉其中的任何業務功能 重在個人見解以及介面實現 關於360安全衛士的主介面,我想大家都見到過,畢竟基本大部分人都安裝過這個軟體,基於我對其介面的個人見解,對主介面分割為四部分 分別為標題欄 工具欄 內容區域 狀態列,分割圖例如下圖所示 由於標題欄 工具欄 ...