>[0131]WindowState.java
[0132]WindowToken.java
[0133]AppffindowToken.java
[0134]Sess1n, java
[0135]InputManager.java
[0136]InputMonitor.java
[0137]其中,WindowManagerService負(fù)責(zé)完成窗口的管理工作;
[0138]WindowState (窗口狀態(tài)類)與客戶端窗口是——對應(yīng)的,即每個窗口都具有一個WindowState,應(yīng)用調(diào)用WindowManager.addView()創(chuàng)建窗口時,會在WindowManagerService 添加一個 WindowState 與之--對應(yīng)。
[0139]InputMonitor (輸入監(jiān)聽器)負(fù)責(zé)上層的消息分發(fā)功能。
[0140]在實際應(yīng)用中,WindowState保存了其對應(yīng)的窗口的幾乎所有屬性及狀態(tài)數(shù)據(jù),可以說WindowState就代表窗口。
[0141]WindowManagerService可以通過WindowState的屬性及狀態(tài)數(shù)據(jù)來管理窗口的狀態(tài),包括層次,焦點分配,位置布局等。
[0142]WindowState的大部分?jǐn)?shù)據(jù)在窗口創(chuàng)建時生成,部分狀態(tài)數(shù)據(jù)及調(diào)整數(shù)據(jù)由WindowManagerService 來控制使用。
[0143]WindowManagerService在接收到調(diào)整指令時,從調(diào)整指令中提取調(diào)整指令,按照窗口布局的原始策略,如窗口的層次、窗口間的依賴關(guān)系等,將調(diào)整數(shù)據(jù)分發(fā)給需要調(diào)整的窗P。
[0144]WindowManageService在控制窗口進(jìn)行刷新顯示,調(diào)出窗口對應(yīng)的WindowState中的窗口數(shù)據(jù),其中包括原始數(shù)據(jù)(如原始大小、原始位置等)和調(diào)整數(shù)據(jù),基于原始數(shù)據(jù)和調(diào)整數(shù)據(jù)計算窗口的顯示數(shù)據(jù),如目標(biāo)位置及目標(biāo)大小等,以驅(qū)動顯示屏按照該顯示數(shù)據(jù)進(jìn)行顯示。
[0145]在本發(fā)明實施例的一種優(yōu)選示例中,所述調(diào)整數(shù)據(jù)可以包括偏移量和/或縮放比例;
[0146]其中,偏移量可以為窗口移動的移動方向及移動距離,可以用于對窗口進(jìn)行移動;
[0147]縮放比例可以窗口縮小或放大的比例,可以用于對窗口進(jìn)行縮小或方法。
[0148]在本示例中,該子步驟S13可以包括如下子步驟:
[0149]子步驟S131,窗口管理服務(wù)對原始數(shù)據(jù)疊加偏移量,以獲得顯示數(shù)據(jù)進(jìn)行顯示;
[0150]在本示例中,針對移動操作,可以在原始數(shù)據(jù)的原始位置的基礎(chǔ)上,疊加偏移量,獲得用于顯示的目標(biāo)位置,其顯示的目標(biāo)大小可以沿用原始數(shù)據(jù)的原始大小。
[0151]例如,如圖3B所示,偏移量為(Δχ,Ay),則可以將主窗口 302 (包括子窗口 303)移動(Λχ,Δγ)的距離,如虛線所示,移動后的顯示屏的虛擬原點305’的坐標(biāo)為(Δχ,△y),移動后的子窗口 303的位置A’為(X1+Δχ, Y1+Δγ) 0
[0152]或者,
[0153]子步驟S132,窗口管理服務(wù)對原始數(shù)據(jù)乘以縮放比例,以獲得顯示數(shù)據(jù)進(jìn)行顯示;
[0154]在本示例中,針對縮放操作,可以在原始數(shù)據(jù)的原始大小的基礎(chǔ)上按照縮放比例進(jìn)行縮放,獲得用于顯示的目標(biāo)大小,其顯示的目標(biāo)位置可以依賴顯示屏的虛擬原點進(jìn)行布局。
[0155]例如,如圖3C所示,縮放比例為η% (η為正數(shù)),則可以將主窗口 302 (包括子窗口 304)的原始大小縮放為η%,主窗口 302的目標(biāo)大小為(W*n%,H*n% ),如虛線所示,縮放后的顯示屏的虛擬原點305’的坐標(biāo)為(0,0),即與縮放前的虛擬原點305重疊,縮放后的子窗口 304 的位置 B ’ 為(x2*n %,y2*n % )。
[0156]或者,
[0157]子步驟S133,窗口管理服務(wù)對原始數(shù)據(jù)乘以縮放比例,以獲得變量數(shù)據(jù);
[0158]子步驟S134,窗口管理服務(wù)對變量數(shù)據(jù)疊加偏移量,以獲得顯示數(shù)據(jù)進(jìn)行顯示;
[0159]在本示例中,針對移動操作和縮放操作,可以先進(jìn)行縮放操作,再進(jìn)行移動操作,即可以在原始數(shù)據(jù)的原始大小的基礎(chǔ)上按照縮放比例進(jìn)行縮放,獲得用于顯示的目標(biāo)大小,變量位置(變量數(shù)據(jù))可以沿顯示屏的虛擬原點進(jìn)行布局,在變量位置的基礎(chǔ)上,疊加偏移量,獲得用于顯示的目標(biāo)位置。
[0160]例如,如圖3D所示,偏移量為(Δχ,Ay),縮放比例為η% (η為正數(shù)),則可以將主窗口 302 (包括子窗口 303、子窗口 304)的原始大小縮放為η%,如主窗口 302的目標(biāo)大小為(W*n%,H*n% ),子窗口 303的變量位置為(Xl*n%,yi*n% ),子窗口 304的變量位置為(x2*n%,y2*n% ),再將主窗口 302 (包括子窗口 303、子窗口 304)移動(Δχ,Δ y)的距離,如虛線所示,調(diào)整后的虛擬原點305’的坐標(biāo)為(ΔΧ,Ay),調(diào)整后的子窗口 303的位置Af 為+ Δ X,y^n% +Ay),子窗口 304 的位置 B’ 為(χ2*η% + Δ x,y2*n% +Ay)。
[0161]當(dāng)然,上述調(diào)整方式只是作為示例,在實施本發(fā)明實施例時,可以根據(jù)實際情況設(shè)置其他調(diào)整方式,本發(fā)明實施例對此不加以限制。另外,除了上述調(diào)整方式外,本領(lǐng)域技術(shù)人員還可以根據(jù)實際需要采用其它調(diào)整方式,本發(fā)明實施例對此也不加以限制。
[0162]步驟202,當(dāng)接收到觸摸屏上發(fā)生觸摸事件時,將發(fā)生所述觸摸事件的第一坐標(biāo)位置按照所述調(diào)整數(shù)據(jù)映射為第二坐標(biāo)位置;
[0163]在本發(fā)明實施例中,驅(qū)動層在檢測到觸摸屏上發(fā)生的觸摸事件時,可以將觸摸事件上報給應(yīng)用層,在應(yīng)用層中可以將發(fā)生所述觸摸事件的第一坐標(biāo)位置按照所述調(diào)整數(shù)據(jù)映射為第二坐標(biāo)位置。
[0164]若窗口進(jìn)行了調(diào)整,顯示屏顯示的是調(diào)整后的窗口(包括控件),在用戶的角度看,窗口(包括控件)已經(jīng)調(diào)整,應(yīng)該點擊調(diào)整后的窗口(包括控件)觸發(fā)相應(yīng)的功能。
[0165]假設(shè),顯示屏的虛擬原點(左上角)為(0,O),觸摸屏的虛擬原點(左上角,電流值為O的點)也是(0,0),調(diào)整窗口后的顯示內(nèi)容偏移(X(l,y(l),即調(diào)整后的顯示屏的虛擬原點為(χο,y。)。
[0166]由于顯示屏的位置及窗口(包括控件)之間的關(guān)系已經(jīng)確定,即顯示屏的原始位置及窗口(包括控件)之間的關(guān)系已經(jīng)確定,并且,觸摸屏與顯示屏的位置關(guān)系是一一對應(yīng)的,系統(tǒng)上層仍然認(rèn)為窗口所依賴的顯示屏的虛擬原點是(0,O),其所對應(yīng)的觸摸屏的虛擬原點是(0,O)。
[0167]由于經(jīng)過調(diào)整,用戶所點擊的位置是觸摸屏的物理位置,并非其需要觸發(fā)的控件的在顯示屏中的位置,即此時上報的觸摸事件依賴的是調(diào)整后的顯示屏的虛擬原點(X(1,yQ),但是系統(tǒng)上層需要的觸摸事件其實仍然是依賴于移動前的顯示屏的虛擬原點(0,0)。
[0168]因此,在本發(fā)明實施例中,可以將觸摸事件對應(yīng)的第一坐標(biāo)位置按照調(diào)整數(shù)據(jù)轉(zhuǎn)換為第二坐標(biāo)位置,即將觸屏事件所依賴顯示屏的虛擬原點從調(diào)整后的(X(l,y0)映射為調(diào)整前的(0,0),以獲得用戶需要觸發(fā)的顯示屏的真實位置。
[0169]例如,如圖3A-圖3D所示,子窗口 303 (包括控件)的原始位置為A、子窗口 304 (包括控件)的原始位置為B,在調(diào)整窗口之后,子窗口 303(包括控件)的目標(biāo)位置為A’、子窗口 304 (包括控件)的目標(biāo)位置為B’。
[0170]在用戶的角度看,子窗口 303(包括控件)是顯示在目標(biāo)位置為A’上、子窗口304 (包括控件)是顯示在目標(biāo)位置為B’上,因此,用戶一般會在觸摸屏上點擊目標(biāo)位置A’,意圖觸發(fā)子窗口 303中的控件,或者,在觸摸屏上點擊目標(biāo)位置B’,意圖觸發(fā)子窗口 304中的控件。
[0171]在具體實現(xiàn)中,用戶可以通過手部、手寫筆等方式在觸摸屏上進(jìn)行點擊、滑動等操作,觸摸屏可以檢測用戶的觸摸信號,將該觸摸信號轉(zhuǎn)換成觸摸事件和坐標(biāo)位置(第一坐標(biāo)位置,即在觸摸屏中發(fā)生觸摸事件的位置),如直角坐標(biāo)(即X坐標(biāo)和Y坐標(biāo))。
[0172]其中,觸摸事件具體可以包括按下事件(Act1n_Down)、移動事件(Act1n_Move)和抬起事件(Act1nJJp)等等。
[0173]其中,按下事件(Act1n_Down)可以表示用戶在觸摸屏按下未移動、未抬起,移動事件(Act1ruMove)可以表示用戶在觸摸屏按下后開始移動(或滑行),抬起事件(Act1nJJp)可以表示用戶在觸摸屏抬起。
[0174]不同的觸摸事件可以組合定義觸控手勢,應(yīng)用可以按照該觸控手勢觸發(fā)相應(yīng)的操作,完成觸控操作。
[0175]在本發(fā)明實施例中,如圖3A-圖3D所示,可以將發(fā)生在觸摸屏上目標(biāo)位置為A’ (第一坐標(biāo)位置)、目標(biāo)位置為B’ (第一坐標(biāo)位置)的觸摸事件,映射為發(fā)生在目標(biāo)位置為A(第二坐標(biāo)位置)、目標(biāo)位置為B(第二坐標(biāo)位置)的觸摸事件,使得可以正常觸發(fā)子窗口 303中的控件、子窗口 304中的控件。
[0176]在本發(fā)明的一種優(yōu)選實施例中,步驟201可以包括如下子步驟:
[0177]子步驟S21,輸入監(jiān)聽器獲取存儲在窗口狀態(tài)類中的窗口數(shù)據(jù);
[0178]子步驟S22,輸入監(jiān)聽器按照所述窗口數(shù)據(jù)中的調(diào)整數(shù)據(jù),將發(fā)生所述觸摸事件的第一坐標(biāo)位置映射為第二坐標(biāo)位置。
[0179]在本發(fā)明實施例中,觸摸屏的觸摸事件的數(shù)據(jù)可以上報給InputMonitor,在InputMonitor中重新設(shè)置窗口綁定的事件處理策略,即窗口的位置與觸摸事件分發(fā)策略。
[0180]具體而言,WindowMa