一種Android焦點變換方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開一種Android焦點變換方法及系統(tǒng),該方法包括:A、控件布局時定義一框架層,并在框架層中布局組件層和焦點框?qū)?;B、設(shè)置組件層及焦點框?qū)拥膶捀卟⒄{(diào)用組件層的繪制函數(shù)和焦點框?qū)拥睦L制函數(shù)分別繪制組件和焦點框;C、組件層接收焦點移動事件,計算焦點框移動的軌跡值,并將該軌跡值交由焦點框?qū)拥慕裹c移動函數(shù)進(jìn)行參數(shù)設(shè)置,最后調(diào)用焦點框?qū)拥睦L制函數(shù)利用所設(shè)置參數(shù)繪制焦點框。本發(fā)明系統(tǒng)通過設(shè)置相對獨立的組件層和焦點框?qū)?,使焦點框的繪制和組件的繪制分別進(jìn)行且互不影響。從而使本系統(tǒng)可在組件沒有更新,而焦點框需要移動的情況下,只繪制焦點框而不繪制組件,從而優(yōu)化執(zhí)行效率,節(jié)約系統(tǒng)資源。
【專利說明】一種Android焦點變換方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及互聯(lián)網(wǎng)【技術(shù)領(lǐng)域】,尤其涉及一種Android焦點變換方法及系統(tǒng)。
【背景技術(shù)】
[0002]現(xiàn)在很多的應(yīng)用在進(jìn)行焦點切換時,會采用焦點平滑移動的方式,以增強(qiáng)用戶體驗效果。像Iistview和GridView是采用焦點平滑移動最常用的控件。目前在實現(xiàn)焦點平滑移動,是采用重新定義控件,然后在控件的繪制函數(shù)中不斷繪制焦點框?qū)崿F(xiàn)的。這個繪制過程,應(yīng)用組件和焦點框都是在一張畫布上進(jìn)行繪制的,在下一次繪制前,需要先清屏,然后再繪制。就目前的清屏機(jī)制,會清除掉屏幕上所有的組件(元素),然后再重新繪制所有的組件和焦點框。這樣的操作方式顯然對于系統(tǒng)資源是一種極大的浪費,尤其是焦點移動的過程中,組件不發(fā)生變化的情況下,卻需要不斷的繪制所有的組件和焦點框。當(dāng)系統(tǒng)資源緊張的時候,焦點框的移動會有卡頓的現(xiàn)象,就是組件的過度繪制造成的。
[0003]因此,現(xiàn)有技術(shù)還有待于改進(jìn)和發(fā)展。
【發(fā)明內(nèi)容】
[0004]鑒于上述現(xiàn)有技術(shù)的不足,本發(fā)明的目的在于提供一種Android焦點變換方法及系統(tǒng),旨在解決目前實現(xiàn)焦點平滑移動的機(jī)制占用系統(tǒng)資源多,易造成系統(tǒng)卡頓的問題。
[0005]本發(fā)明的技術(shù)方案如下:
一種Android焦點變換方法,其中,所述方法包括以下步驟:
A、控件布局時定義一框架層,并在框架層中布局有焦點需求的組件層和用于繪制焦點框的焦點框?qū)樱?br>
B、設(shè)置組件層及焦點框?qū)拥膶捀邤?shù)據(jù)并調(diào)用組件層的繪制函數(shù)和焦點框?qū)拥睦L制函數(shù)分別繪制組件層組件和焦點框;
C、組件層接收焦點移動事件,計算焦點框移動的軌跡值,并將該軌跡值交由焦點框?qū)拥慕裹c移動函數(shù)進(jìn)行參數(shù)設(shè)置,最后調(diào)用焦點框?qū)拥睦L制函數(shù)利用所設(shè)置的參數(shù)繪制焦點框。
[0006]所述的Android焦點變換方法,其中,所述步驟A中在框架層中布局完組件層和焦點框?qū)又?,調(diào)用重寫繪制函數(shù)對組件層和焦點框?qū)油瑫r進(jìn)行繪制。
[0007]所述的Android焦點變換方法,其中,所述步驟B具體為:
B1、組件層調(diào)用組件層的測算函數(shù)設(shè)置組件層寬高數(shù)據(jù)并將該數(shù)據(jù)傳遞至焦點框?qū)樱裹c框?qū)诱{(diào)用測算函數(shù)并利用所傳入的寬高數(shù)據(jù)設(shè)置焦點框?qū)拥膶捀摺?br>
[0008]B2、組件層調(diào)用其繪制函數(shù)并利用所設(shè)置的組件層寬高數(shù)據(jù)繪制所述組件層組件,之后焦點框?qū)诱{(diào)用其繪制函數(shù)并根據(jù)設(shè)置的焦點框?qū)訉捀咴诮M件層預(yù)定組件位置繪制所述焦點框。
[0009]所述的Android焦點變換方法,其中,所述步驟A之后,步驟B之前還包括:
所述組件層和焦點框?qū)舆M(jìn)行初始化。[0010]所述的Android焦點變換方法,其中,所述步驟BI具體為:
所述組件層調(diào)用其測算函數(shù)設(shè)置組件層寬高數(shù)據(jù)并將該數(shù)據(jù)傳遞至焦點框?qū)樱?dāng)所述焦點框?qū)釉O(shè)置的寬高測算接口首次接收所述組件層發(fā)送的組件層寬高數(shù)據(jù)時,其調(diào)用焦點框?qū)訙y算函數(shù)利用該寬高數(shù)據(jù)設(shè)置焦點框?qū)訉捀?,并記錄將該焦點框?qū)訉捀撸?br>
當(dāng)所述寬高測算接口再次接收到所述組件層發(fā)送的組件層寬高數(shù)據(jù)時,將所接收的組件層寬高數(shù)據(jù)與所記錄的焦點框?qū)訉捀哌M(jìn)行比對,若比對不一致,則所述所述寬高測算接口調(diào)用焦點框?qū)訙y算函數(shù)利用當(dāng)前接收的組件層寬高數(shù)據(jù)重新設(shè)置焦點框?qū)拥膶捀摺?br>
[0011]所述的Android焦點變換方法,其中,所述焦點框移動的軌跡值包括當(dāng)前焦點所處組件的起始坐標(biāo)、及下一個獲得焦點框的組件與當(dāng)前焦點框所處組件的X軸偏移量和I軸偏移量。
[0012]所述的Android焦點變換方法,其中,所述步驟C具體為:
Cl、組件層的按鍵監(jiān)聽機(jī)制接收焦點移動事件,獲取當(dāng)前焦點所處組件的起始坐標(biāo)并計算下一個獲得焦點框的組件索引值;
C2、利用所得出的當(dāng)前焦點所處組件的起始坐標(biāo)及下一個獲得焦點框的組件索引值計算得出當(dāng)前焦點框所處組件的X軸偏移量和I軸偏移量;
C3、將所計算出的當(dāng)前焦點所處組件的起始坐標(biāo)、下一個獲得焦點框的組件索弓I值及當(dāng)前焦點框所處組件的X軸偏移量和y軸偏移量作為參數(shù)傳遞至焦點框?qū)拥慕裹c移動函數(shù);
C4、所述焦點移動函數(shù)利用所傳入的參數(shù)進(jìn)行軌跡設(shè)置,之后調(diào)用焦點框?qū)拥睦L制函數(shù)利用所設(shè)置的軌跡坐標(biāo)位置多次繪制焦點框,實現(xiàn)焦點框的平滑移動效果。
[0013]所述的Android焦點變換方法,其中,通過組件層設(shè)定焦點框樣式,其中,當(dāng)焦點框為圖片類型時,在所述組件層初始化時,將焦點框圖片路徑傳遞至焦點框?qū)?,并將圖片保存為靜態(tài)變量。
[0014]所述的Android焦點變換方法,其中,所述步驟Cl中獲取當(dāng)前焦點所處組件的起始坐標(biāo)并計算下一個獲得焦點框的組件索引值具體為:
C11、組件層的按鍵監(jiān)聽機(jī)制接收焦點移動事件,獲取當(dāng)前焦點所處組件的起始坐標(biāo)并根據(jù)焦點移動事件查找焦點框移動的下一個組件并判斷該組件是否為不可獲得焦點模式,若是,則繼續(xù)查找下一個組件直至找到可獲得焦點的組件;
C12、計算所查找到下一個可獲得焦點的組件的索引值。
[0015]一種Android焦點變換系統(tǒng),其中,所述系統(tǒng)包括:
框架層模塊、用于控件布局時定義一框架層,并在框架層中布局有焦點需求的組件層和用于繪制焦點框的焦點框?qū)樱?br>
組件層,用于設(shè)置組件層的寬高數(shù)據(jù)并調(diào)用組件層的繪制函數(shù)繪制組件層組件,以及用于接收焦點移動事件,計算焦點框移動的軌跡值;
焦點框?qū)?,用于設(shè)置焦點框?qū)拥膶捀邤?shù)據(jù)并調(diào)用焦點框?qū)拥睦L制函數(shù)繪制焦點框,以及用于將所述組件層計算的軌跡值交由焦點框?qū)拥慕裹c移動函數(shù)進(jìn)行參數(shù)設(shè)置,并調(diào)用焦點框?qū)拥睦L制函數(shù)利用所設(shè)置的參數(shù)繪制焦點框。
[0016]有益效果:本發(fā)明提供一種Android焦點變換方法及系統(tǒng),該系統(tǒng)實現(xiàn)相對獨立的組件層和焦點框?qū)樱菇裹c框的繪制和組件的繪制分別進(jìn)行且互不影響。從而使本系統(tǒng)可在組件沒有更新,而焦點框需要移動繪制的情況下,只繪制焦點框而不繪制組件,從而優(yōu)化執(zhí)行效率,節(jié)約系統(tǒng)資源,即在避免系統(tǒng)資源浪費的同時大大提高了執(zhí)行效率。
【專利附圖】
【附圖說明】
[0017]圖1為本發(fā)明具體實施例中Android焦點變換方法流程圖。
[0018]圖2為本發(fā)明具體實施例中布局圖層示意圖。
[0019]圖3為圖1中步驟S200的具體方法流程圖。
[0020]圖4為圖1中步驟S300的具體方法流程圖。
[0021]圖5為圖4中步驟S310的具體方法流程圖。
[0022]圖6為本發(fā)明的具體實施例中布局操作示意圖。
[0023]圖7為本發(fā)明具體實施例中應(yīng)用繪制過程圖。
[0024]圖8為本發(fā)明具體實施例中焦點框移動繪制流程圖。
[0025]圖9為本發(fā)明具體實施例中Android焦點變換系統(tǒng)的原理框圖。
【具體實施方式】
[0026]本發(fā)明提供一種Android焦點變換方法及系統(tǒng),為使本發(fā)明的目的、技術(shù)方案及效果更加清楚、明確,以下對本發(fā)明進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0027]如圖1所示的一種Android焦點變換方法,其中,所述方法包括以下步驟:
S100、控件布局時定義一框架層,并在框架層中布局有焦點需求的組件層和用于繪制
焦點框的焦點框?qū)印?br>
[0028]其中,控件布局如圖2所示,框架層10中內(nèi)布局兩層,一層布局應(yīng)用,即為組件層11,另一層布局焦點框,即為焦點框?qū)?2。所述框架層的寬高設(shè)置自適應(yīng),所述組件層11及焦點框?qū)?2作為框架層的元素,在框架層中布局完組件層11和焦點框?qū)?2之后,調(diào)用重寫繪制函數(shù)對組件層11和焦點框?qū)?2同時進(jìn)行繪制。另外,焦點框圖片樣式是需要組件層11進(jìn)行設(shè)置的。
[0029]上述框架層的布局可具有如下結(jié)構(gòu):
-框架層開始
-組件層開始 —組件I —組件2
—組件N —組件層結(jié)束 一焦點框?qū)? —框架層結(jié)束。
[0030]通過定義上述的框架層所要實現(xiàn)的效果是:焦點框的繪制在焦點框?qū)?2繪制函數(shù)中完成,繪制不影響組件層11的組件;組件層11組件的繪制在組件層11繪制函數(shù)中完成,也不會影響焦點框?qū)?2。兩者是相對獨立的。當(dāng)需要全部組件及焦點框同時更新時,則進(jìn)行框架層的繪制請求。
[0031]S200、設(shè)置組件層及焦點框?qū)拥膶捀邤?shù)據(jù)并調(diào)用組件層的繪制函數(shù)和焦點框?qū)拥睦L制函數(shù)分別繪制組件層組件和焦點框。
[0032]所述組件層是有焦點需求的組件集合,在組件層布局繪制之前需要進(jìn)行寬高的設(shè)置,這樣設(shè)置是為確定整個組件層的寬度和高度。
[0033]進(jìn)一步地,所述步驟SlOO之后,步驟S200之前還包括:
所述組件層和焦點框?qū)舆M(jìn)行初始化。即將組件裝載入組件層,并將焦點框?qū)訉ο髠魅虢M件層。同時組件層組件的各個屬性進(jìn)行初始化。
[0034]具體地,如圖3所示,所述步驟S200具體為:
S210、組件層調(diào)用組件層的測算函數(shù)設(shè)置組件層寬高數(shù)據(jù)并將該數(shù)據(jù)傳遞至焦點框?qū)樱裹c框?qū)诱{(diào)用測算函數(shù)并利用所傳入的寬高數(shù)據(jù)設(shè)置焦點框?qū)拥膶捀摺?br>
[0035]為了保持焦點框?qū)拥膶捀吲c組件層的寬高一致,當(dāng)組件層測算函數(shù)(onMeasure)進(jìn)行寬高設(shè)置時,將設(shè)置的寬高值同時傳遞到焦點框?qū)?,焦點框?qū)右矊⒄{(diào)用測算函數(shù)進(jìn)行寬高的設(shè)置。
[0036]焦點框?qū)拥膶捀哂捎谝蕾囉谑褂媒裹c框的組件層的寬高,因此組件層的寬高發(fā)生變化時,焦點框?qū)訉捀咭鄳?yīng)的變化。
[0037]進(jìn)一步地,所述步驟S210還可進(jìn)一步包括:
所述組件層調(diào)用其測算函數(shù)設(shè)置組件層寬高數(shù)據(jù)并將該數(shù)據(jù)傳遞至焦點框?qū)?,?dāng)所述焦點框?qū)釉O(shè)置的寬高測算接口首次接收所述組件層發(fā)送的組件層寬高數(shù)據(jù)時,其調(diào)用焦點框?qū)訙y算函數(shù)(本函數(shù)為重定義函數(shù),繼承自android系統(tǒng)測算函數(shù))利用該寬高數(shù)據(jù)設(shè)置焦點框?qū)訉捀?,并記錄將該焦點框?qū)訉捀撸?br>
當(dāng)所述寬高測算接口再次接收到所述組件層發(fā)送的組件層寬高數(shù)據(jù)時,將所接收的組件層寬高數(shù)據(jù)與所記錄的焦點框?qū)訉捀哌M(jìn)行比對,若比對不一致,則所述寬高測算接口調(diào)用焦點框?qū)訙y算函數(shù)利用當(dāng)前接收的組件層寬高數(shù)據(jù)重新設(shè)置焦點框?qū)拥膶捀撸蠢迷摯谓邮盏慕M件層寬高數(shù)據(jù)替代之前記錄的焦點框?qū)訉捀?。?dāng)比對一致時,舍棄所接收的本次數(shù)據(jù)。
[0038]另外還需要計算組件位置
組件的位置也即組件在屏幕上的坐標(biāo)。該坐標(biāo)的隸屬坐標(biāo)系是由系統(tǒng)預(yù)設(shè)生成,其可以是以屏幕左上角為原點建立的坐標(biāo)系。
[0039]組件的X坐標(biāo)=組件層相對屏幕左側(cè)的距離+該組件左側(cè)所有組件的寬度+該組件左側(cè)的控件之間的所有空隙值;
組件的y坐標(biāo)=組件層相對屏幕頂部的距離+該組件上方所有組件的高度+該組件上方控件之間的所有空隙值;
組件在獲得焦點時,焦點的位置與組件位置是重合的,因此組件位置的計算是為確定焦點的位置。
[0040]S220、組件層調(diào)用其繪制函數(shù)并利用所設(shè)置的組件層寬高數(shù)據(jù)繪制所述組件層組件,之后焦點框?qū)诱{(diào)用其繪制函數(shù)并根據(jù)設(shè)置的焦點框?qū)訉捀咴诮M件層預(yù)定組件位置繪制所述焦點框。
[0041]組件層繪制過程屬于android默認(rèn)繪制機(jī)制。而焦點框繪制前需要確認(rèn)焦點框的位置。默認(rèn)位置為組件層可獲得焦點的第一個組件的位置;繼而獲得焦點位置,第一個可獲得焦點的組件位置坐標(biāo)即為焦點位置坐標(biāo)。因此,通過第一個可獲得焦點的組件的位置確認(rèn)焦點位置。第一個可獲得焦點的組件的坐標(biāo)的計算可按照組件坐標(biāo)位置的計算方法進(jìn)行。
[0042]焦點框的寬高實際上由獲得焦點位置的組件層組件確定。因此如步驟S210所述,在繪制焦點框前,組件層組件需要獲取組件寬高或者需要的數(shù)值作為參數(shù)傳遞到焦點框?qū)印?br>
[0043]另外,焦點框樣式是由組件層設(shè)定的,例如焦點框為圖片類型時,在所述組件層初始化時,將焦點框圖片路徑傳遞至焦點框?qū)?,并將圖片保存為靜態(tài)變量。從而使得圖片在整個操作過程中都有效,在不更換焦點框的情況下,無需多次傳遞。
[0044]本發(fā)明在需要繪制焦點框時,需要組件層進(jìn)行繪制觸發(fā)。首次繪制焦點框是在組件層的繪制函數(shù)繪制了擁有焦點框的組件后,調(diào)用焦點框繪制接口,組件層將當(dāng)前獲得焦點組件的寬高傳遞到焦點框?qū)?,以調(diào)整焦點框圖片的大小,然后焦點框繪制接口調(diào)用繪制函數(shù)將圖片繪制在已經(jīng)獲得的焦點框的位置上。(已經(jīng)獲得的焦點框的位置為上述的步驟S200所得出的)
S300、組件層接收焦點移動事件,計算焦點框移動的軌跡值,并將該軌跡值交由焦點框?qū)拥慕裹c移動函數(shù)進(jìn)行參數(shù)設(shè)置,最后調(diào)用焦點框?qū)拥睦L制函數(shù)利用所設(shè)置的參數(shù)繪制焦點框。
[0045]其中,所述焦點框移動的軌跡值包括當(dāng)前焦點所處組件的起始坐標(biāo)、及下一個獲得焦點框的組件與當(dāng)前焦點框所處組件的X軸偏移量和I軸偏移量(所依照的坐標(biāo)系位上述的坐標(biāo)系,即以屏幕左上角為原點建立的坐標(biāo)系)
另外,所述的焦點框?qū)拥恼w背景為透明色。
[0046]如圖4所示的具體實施例中,所述步驟S300具體為:
5310、組件層的按鍵監(jiān)聽機(jī)制接收焦點移動事件,獲取當(dāng)前焦點所處組件的起始坐標(biāo)并計算下一個獲得焦點框的組件索引值;
S320、利用所得出的當(dāng)前焦點所處組件的起始坐標(biāo)及下一個獲得焦點框的組件索引值計算得出當(dāng)前焦點框所處組件的X軸偏移量和I軸偏移量;
S330、將所計算出的當(dāng)前焦點所處組件的起始坐標(biāo)、下一個獲得焦點框的組件索弓I值及當(dāng)前焦點框所處組件的X軸偏移量和y軸偏移量作為參數(shù)傳遞至焦點框?qū)拥慕裹c移動函數(shù);
S340、所述焦點移動函數(shù)利用所傳入的參數(shù)進(jìn)行軌跡設(shè)置,之后調(diào)用焦點框?qū)拥睦L制函數(shù)利用所設(shè)置的軌跡坐標(biāo)位置多次繪制焦點框,實現(xiàn)焦點框的平滑移動效果。
[0047]進(jìn)一步地,如圖5所示的上述步驟S310中獲取當(dāng)前焦點所處組件的起始坐標(biāo)并計算下一個獲得焦點框的組件索引值具體為:
5311、組件層的按鍵監(jiān)聽機(jī)制接收焦點移動事件,獲取當(dāng)前焦點所處組件的起始坐標(biāo)并根據(jù)焦點移動事件查找焦點框移動的下一個組件并判斷該組件是否為不可獲得焦點模式,若是,則繼續(xù)查找下一個組件直至找到可獲得焦點的組件;
5312、計算所查找到下一個可獲得焦點的組件的索引值。
[0048]通過本發(fā)明上述方法實現(xiàn)的焦點框的移動大致過程為:當(dāng)用戶按下操作鍵(比如上下鍵),焦點框開始移動。此時接收到按鍵操作的是組件層的按鍵監(jiān)聽機(jī)制。組件層監(jiān)聽機(jī)制會根據(jù)鍵的不同,計算焦點框移動的起始坐標(biāo),及焦點框的X軸和I軸的偏移坐標(biāo)值,并將這些坐標(biāo)值作為參數(shù)傳遞到焦點框?qū)拥慕裹c移動函數(shù)。焦點移動函數(shù)是利用控制視圖滑動的實現(xiàn)接口 scroller,其將傳遞進(jìn)來的參數(shù)進(jìn)行設(shè)置,然后調(diào)用繪制函數(shù);在繪制函數(shù)中,獲得scroller提供的當(dāng)前軌跡的x軸坐標(biāo)和y軸坐標(biāo),然后將這兩個值作為焦點框繪制的位置,進(jìn)行繪制。并多次繪制焦點框,就實現(xiàn)了平滑移動效果。
[0049]當(dāng)方向鍵被操作,本發(fā)明的焦點會根據(jù)方向鍵進(jìn)行相應(yīng)的移動。因焦點框采用繪制的方式,因此需要預(yù)先設(shè)定移動軌跡。在組件層的組件中,組件可以設(shè)置為不可獲得焦點的模式。而移動軌跡的確定需要四個值:當(dāng)前焦點的X坐標(biāo),當(dāng)前焦點的I坐標(biāo),下一個獲得焦點框的組件與當(dāng)前焦點框所在組件的X軸偏移量及I軸偏移量。
[0050]下面通過如圖6所示的例子對焦點框移動軌跡的計算進(jìn)行進(jìn)一步闡述,下述可能用到的名詞定義
itemffidth:組件的寬
itmeHeight:組件的高
hSpace:水平方向上兩個組件之間的空隙值
vSpace:豎直方向上兩個組件之間的空隙值
hNum:組件的列數(shù)
vNum:組件的行數(shù)
ID:當(dāng)前獲得焦點的組件索引值
nextld:下一個可以獲得焦點的組件索引值
圖中所示是為一個GridView控件,包含10個組件,其中組件2,組件8,組件9被設(shè)置為不可獲得焦點模式。向右的操作時,可以獲得焦點的順序為:組件1,組件3,組件4,組件5,組件6,組件7,組件10 ;也即“Z”字形操作。10個組件,vNum為4,hNum為3。這10個組件的itemWidth相同,itemHeightu也相同,組件間的hSpace和vSpace也是固定的。
[0051]當(dāng)焦點向右移動時,則向右移動軌跡計算為:
首先計算下一個需獲得焦點框的組件的ID(索引值)。比如當(dāng)前焦點在組件I上,按下向右操作鍵一次,則焦點框向右移動一次。組件2為不可獲得焦點模式,則下一個獲得焦點的組件是組件3。如當(dāng)前焦點在組件7上,按下向右操作鍵一次,則焦點框向右移動一次;但是組件8不可獲得焦點,而組件8是第二行的最后一個組件,則折行到第三行;組件9也不可獲得焦點,則下一個可獲得焦點的組件是組件10。
[0052]根據(jù)以上描述,當(dāng)下一個可獲得焦點的組件nextld可以獲得時,向右移動軌跡的公式可分為本行計算及折行計算兩種:
下一個可獲得焦點的組件在本行時:
按照組件位置坐標(biāo)的計算方法可將移動軌跡為的位置偏移量表示為:
X 軸偏移量=(nextld -1D)* (itemWidth +hSpace); y軸偏移量=O;
下一個可獲得焦點的組件折行時:
同樣按照組件位置坐標(biāo)的計算方法可將移動軌跡為的位置偏移量表示為:
X 軸偏移量=((nextld -1D) % vNum ) * (itemWidth +hSpace); y 軸偏移量=((nextld -1D) / vNum ) * (itemHeight + vSpace);
當(dāng)ID即為最后一個可獲得焦點的組件,即不存在下一個可獲得焦點的組件時,右鍵操
作舍棄。
[0053]當(dāng)焦點向左移動時,則向左移動軌跡計算為:
當(dāng)按下向左鍵時,焦點應(yīng)向左移動。比如焦點在組件I上,按下左鍵,組件I的左側(cè)不存在組件,也即找不到nextld,因此本次操作舍棄;如焦點在組件10上時,按下左鍵,焦點向左移動,但是組件9不可獲得焦點,則折行尋找組件8 ;組件8、仍不能獲得焦點,則nextld為7。
[0054]當(dāng)下一個可獲得焦點的組件nextld可以獲得時,向左的運動軌跡計算分為兩種: 下一個可獲得焦點的組件在本行時:
按照組件位置坐標(biāo)的計算方法可將移動軌跡為的位置偏移量表示為:
X 軸偏移量=(nextld -1D) * (itemWidth +hSpace); y軸偏移量=O ;
下一個可獲得焦點的組件折行時:
按照組件位置坐標(biāo)的計算方法可將移動軌跡為的位置偏移量表示為:
X 軸偏移量=((nextld -1D) % vNum ) * (itemWidth +hSpace); y 軸偏移量=((nextld -1D) / vNum ) * (itemHeight + vSpace);
當(dāng)ID即為最后一個可獲得焦點的組件,即不存在下一個可獲得焦點的組件時,左鍵操作舍棄。
[0055]當(dāng)焦點向上移動時,則向上移動軌跡計算為:
按下上鍵時,如果當(dāng)前焦點組件的ID為第一行的組件即I一4,則焦點組件上方不存在組件,即nextld不可獲得,舍棄本次操作;如果焦點組件ID為6時,則焦點組件的上方組件,即組件2不能獲得焦點,即nextld不可獲得,因此本次向上操作也舍棄。
[0056]當(dāng)下一個可獲得焦點的組件nextld可以獲得時,移動軌跡公式為:
按照組件位置坐標(biāo)的計算方法可將移動軌跡為的位置偏移量表示為:
X軸偏移量=O;
y 軸偏移量=((nextld -1D) / vNum ) * (itemHeight + vSpace);
當(dāng)焦點向下移動時,則向下移動軌跡計算為:
按下下鍵時,焦點應(yīng)向下移動。由于第三行只有2個組件,如果是在組件7按下鍵,正下方是不存在控件的,因此需要特殊處理,即組件10獲得焦點。
[0057]如焦點組件是組件4,正下方的組件8不能獲得焦點,即nextld不可獲得,則舍棄本次操作;如焦點控件是組件10,下方?jīng)]有組件,即nextld不可獲得,則舍棄本次操作。
[0058]當(dāng)下一個可獲得焦點的組件nextld可以獲得時,移動軌跡公式為:
按照組件位置坐標(biāo)的計算方法可將移動軌跡為的位置偏移量表示為:
X 軸偏移量=((nextld -1D) % vNum ) * (itemWidth +hSpace); y 軸偏移量=((nextld -1D) / vNum ) * (itemHeight + vSpace)。
[0059]如圖7所示為以GridView組件添加焦點框為例實現(xiàn)的的應(yīng)用繪制過程,其步驟為:
S1、啟動應(yīng)用。[0060]S2、布局組件層及焦點框?qū)?。首先定義一框架層類,繼承自FrameLayout,用來管理GridView組件層和焦點框?qū)?,調(diào)用重寫繪制函數(shù)(繼承自FrameLayout),完成組件層和焦點框?qū)拥耐瑫r繪制。
[0061]S3、初始化。初始化GridView組件層和焦點框?qū)?。將組件裝載入GridView,并將焦點框?qū)訉ο髠魅虢M件層。GridView組件各個屬性進(jìn)行初始化。
[0062]S4、設(shè)置組件層及焦點框?qū)訉捀?。調(diào)用組件層測算函數(shù)設(shè)定組件層的寬高,并將組件層的寬高傳入焦點框?qū)釉O(shè)定寬高。
[0063]S5、組件繪制。
[0064]S6、焦點框繪制。調(diào)用焦點移動函數(shù)設(shè)置參數(shù)和并調(diào)用繪制函數(shù)對焦點框進(jìn)行繪制。
[0065]如圖8所示為焦點移動繪制流程圖,其具體步驟如下:
Hl、操作按鍵。
[0066]H2、組件層接收。組件層接收焦點移動事件,即監(jiān)聽到鍵值,然后判斷焦點移動方向。
[0067]H3、計算下一個索引值是否存在。即判斷nextID是否存在,若存在,則執(zhí)行步驟H4,若否,則執(zhí)行步驟H7。
[0068]H4、計算焦點組件坐標(biāo)及移動偏移量。計算焦點框移動的起始坐標(biāo),及焦點框的X軸和I軸的偏移坐標(biāo)值。
[0069]H5、調(diào)用焦點移動函數(shù)設(shè)置參數(shù)。將上述值作為參數(shù)調(diào)用焦點框?qū)咏裹c移動函數(shù)。
[0070]H6、調(diào)用繪制函數(shù)繪制焦點框。
[0071]H7、結(jié)束操作。
[0072]如圖9所示的Android焦點變換系統(tǒng),其中,所述系統(tǒng)包括:
框架層模塊100、用于控件布局時定義一框架層,并在框架層中布局有焦點需求的組件層和用于繪制焦點框的焦點框?qū)?,即用于裝載組件和焦點框。具體如步驟Sioo所述。
[0073]組件層200,用于設(shè)置組件層的寬高數(shù)據(jù)并調(diào)用組件層的繪制函數(shù)繪制組件層組件,以及用于接收焦點移動事件,計算焦點框移動的軌跡值,其主要作用可概括為設(shè)置焦點框,完成焦點位置計算,及焦點移動時,計算焦點框的移動起始坐標(biāo)及運動偏移量。
[0074]焦點框?qū)?00,用于設(shè)置焦點框?qū)拥膶捀邤?shù)據(jù)并調(diào)用焦點框?qū)拥睦L制函數(shù)繪制焦點框,以及用于將所述組件層計算的軌跡值交由焦點框?qū)拥慕裹c移動函數(shù)進(jìn)行參數(shù)設(shè)置,并調(diào)用焦點框?qū)拥睦L制函數(shù)利用所設(shè)置的參數(shù)繪制焦點框。即用來完成焦點的移動及焦點的繪制。
[0075]本發(fā)明提供一種Android焦點變換方法及系統(tǒng),該系統(tǒng)實現(xiàn)相對獨立的組件層和焦點框?qū)樱菇裹c框的繪制和組件的繪制分別進(jìn)行且互不影響。從而使本系統(tǒng)可在組件沒有更新,而焦點框需要移動繪制的情況下,只繪制焦點框而不繪制組件,從而優(yōu)化執(zhí)行效率,節(jié)約系統(tǒng)資源,即在避免系統(tǒng)資源浪費的同時大大提高了執(zhí)行效率。
[0076]應(yīng)當(dāng)理解的是,本發(fā)明的應(yīng)用不限于上述的舉例,對本領(lǐng)域普通技術(shù)人員來說,可以根據(jù)上述說明加以改進(jìn)或變換,所有這些改進(jìn)和變換都應(yīng)屬于本發(fā)明所附權(quán)利要求的保護(hù)范圍。
【權(quán)利要求】
1.一種Android焦點變換方法,其特征在于,所述方法包括以下步驟: A、控件布局時定義一框架層,并在框架層中布局有焦點需求的組件層和用于繪制焦點框的焦點框?qū)樱? B、設(shè)置組件層及焦點框?qū)拥膶捀邤?shù)據(jù)并調(diào)用組件層的繪制函數(shù)和焦點框?qū)拥睦L制函數(shù)分別繪制組件層組件和焦點框; C、組件層接收焦點移動事件,計算焦點框移動的軌跡值,并將該軌跡值交由焦點框?qū)拥慕裹c移動函數(shù)進(jìn)行參數(shù)設(shè)置,最后調(diào)用焦點框?qū)拥睦L制函數(shù)利用所設(shè)置的參數(shù)繪制焦點框。
2.根據(jù)權(quán)利要求1所述的Android焦點變換方法,其特征在于,所述步驟A中在框架層中布局完組件層和焦點框?qū)又?,調(diào)用重寫繪制函數(shù)對組件層和焦點框?qū)油瑫r進(jìn)行繪制。
3.根據(jù)權(quán)利要求1所述的Android焦點變換方法,其特征在于,所述步驟B具體為: B1、組件層調(diào)用組件層的測算函數(shù)設(shè)置組件層寬高數(shù)據(jù)并將該數(shù)據(jù)傳遞至焦點框?qū)?,焦點框?qū)诱{(diào)用測算函數(shù)并利用所傳入的寬高數(shù)據(jù)設(shè)置焦點框?qū)拥膶捀撸? B2、組件層調(diào)用其繪制函數(shù)并利用所設(shè)置的組件層寬高數(shù)據(jù)繪制所述組件層組件,之后焦點框?qū)诱{(diào)用其繪制函數(shù)并根據(jù)設(shè)置的焦點框?qū)訉捀咴诮M件層預(yù)定組件位置繪制所述焦點框。
4.根據(jù)權(quán)利要求3所 述的Android焦點變換方法,其特征在于,所述步驟A之后,步驟B之前還包括: 所述組件層和焦點框?qū)舆M(jìn)行初始化。
5.根據(jù)權(quán)利要求3所述的Android焦點變換方法,其特征在于,所述步驟BI具體為: 所述組件層調(diào)用其測算函數(shù)設(shè)置組件層寬高數(shù)據(jù)并將該數(shù)據(jù)傳遞至焦點框?qū)?,?dāng)所述焦點框?qū)釉O(shè)置的寬高測算接口首次接收所述組件層發(fā)送的組件層寬高數(shù)據(jù)時,其調(diào)用焦點框?qū)訙y算函數(shù)利用該寬高數(shù)據(jù)設(shè)置焦點框?qū)訉捀?,并記錄將該焦點框?qū)訉捀撸? 當(dāng)所述寬高測算接口再次接收到所述組件層發(fā)送的組件層寬高數(shù)據(jù)時,將所接收的組件層寬高數(shù)據(jù)與所記錄的焦點框?qū)訉捀哌M(jìn)行比對,若比對不一致,則所述所述寬高測算接口調(diào)用焦點框?qū)訙y算函數(shù)利用當(dāng)前接收的組件層寬高數(shù)據(jù)重新設(shè)置焦點框?qū)拥膶捀摺?br>
6.根據(jù)權(quán)利要求1所述的Android焦點變換方法,其特征在于,所述焦點框移動的軌跡值包括當(dāng)前焦點所處組件的起始坐標(biāo)、及下一個獲得焦點框的組件與當(dāng)前焦點框所處組件的X軸偏移量和Y軸偏移量。
7.根據(jù)權(quán)利要求6所述的Android焦點變換方法,其特征在于,所述步驟C具體為: Cl、組件層的按鍵監(jiān)聽機(jī)制接收焦點移動事件,獲取當(dāng)前焦點所處組件的起始坐標(biāo)并計算下一個獲得焦點框的組件索引值; C2、利用所得出的當(dāng)前焦點所處組件的起始坐標(biāo)及下一個獲得焦點框的組件索引值計算得出當(dāng)前焦點框所處組件的X軸偏移量和I軸偏移量; C3、將所計算出的當(dāng)前焦點所處組件的起始坐標(biāo)、下一個獲得焦點框的組件索引值及當(dāng)前焦點框所處組件的X軸偏移量和y軸偏移量作為參數(shù)傳遞至焦點框?qū)拥慕裹c移動函數(shù); C4、所述焦點移動函數(shù)利用所傳入的參數(shù)進(jìn)行軌跡設(shè)置,之后調(diào)用焦點框?qū)拥睦L制函數(shù)利用所設(shè)置的軌跡坐標(biāo)位置多次繪制焦點框,實現(xiàn)焦點框的平滑移動效果。
8.根據(jù)權(quán)利要求4所述的Android焦點變換方法,其特征在于,通過組件層設(shè)定焦點框樣式,其中,當(dāng)焦點框為圖片類型時,在所述組件層初始化時,將焦點框圖片路徑傳遞至焦點框?qū)?,并將圖片保存為靜態(tài)變量。
9.根據(jù)權(quán)利要求7所述的Android焦點變換方法,其特征在于,所述步驟Cl中獲取當(dāng)前焦點所處組件的起始坐標(biāo)并計算下一個獲得焦點框的組件索引值具體為: C11、組件層的按鍵監(jiān)聽機(jī)制接收焦點移動事件,獲取當(dāng)前焦點所處組件的起始坐標(biāo)并根據(jù)焦點移動事件查找焦點框移動的下一個組件并判斷該組件是否為不可獲得焦點模式,若是,則繼續(xù)查找下一個組件直至找到可獲得焦點的組件; C12、計算所查找到下一個可獲得焦點的組件的索引值。
10.一種Android焦點變換系統(tǒng),其特征在于,所述系統(tǒng)包括: 框架層模塊、用于控件布局時定義一框架層,并在框架層中布局有焦點需求的組件層和用于繪制焦點框的焦點框?qū)樱? 組件層模塊,用于設(shè)置組件層的寬高數(shù)據(jù)并調(diào)用組件層的繪制函數(shù)繪制組件層組件,以及用于接收焦點移動事件,計算焦點框移動的軌跡值; 焦點框?qū)幽K,用于設(shè)置焦點框?qū)拥膶捀邤?shù)據(jù)并調(diào)用焦點框?qū)拥睦L制函數(shù)繪制焦點框,以及用于將所述組件層模塊計算的軌跡值交由焦點框?qū)拥慕裹c移動函數(shù)進(jìn)行參數(shù)設(shè)置,并調(diào)用焦點框?qū)拥睦L制函數(shù)利用所設(shè)置的參數(shù)繪制焦點框。
【文檔編號】G06F9/44GK103970538SQ201410189976
【公開日】2014年8月6日 申請日期:2014年5月7日 優(yōu)先權(quán)日:2014年5月7日
【發(fā)明者】李貞貞, 王靜 申請人:Tcl集團(tuán)股份有限公司