symbian 5th學習小結(拖動和pkg)

最近一直在弄移植,將3rd的程序移植到5th上,個人感覺,如果使用的都是系統控件的話,那麼工程將要改動的地方很少。可能主要的工作就是添加上觸摸事件。如果你的前任將接口或者代碼寫的比較好的話,那麼恭喜你改起來會相當容易。

 

說一下我的心得吧,剛剛接觸觸摸事件,有點不大適應。會用的也就EButton1DownEButton1Up這兩個事件,至於拖動EDrag和EMove直接不用也不明白,現在感到很欣慰的是EDrag搞明白了點,而EMove現在也不懂,希望高手留言指點下。

 

如果現在symbian實現拖動,相對來說還是比較容易的。舉個例子來說,我想實現一個矩形在屏幕上的拖動。

 

首先,先定義個成員 TRect iRect;

然後在Draw函數中畫整個矩形,在這裏不累述了。

 

之後就是處理拖動事件。

 

當點擊屏幕的時候會產生個EButton1Down事件,這裏一般我們需要記錄一下他的位置可以用事件的iPosition這個成員獲取到你點擊的位置,TPoint point1;

 

如果你一直在屏幕上,然後拖動,那麼接下來系統會不停的回調HandlePointerEvent這個函數,然後事件類型iType是EDrag,這個時候我們只需要這樣寫,如下

if ( aPointerEvent.iType == TPointerEvent::EDrag )
{

TPoint point2 = aPointerEvent.iPosition - point1;  //相對於第一個點移動的位置

iRect.Move(point2 ); //

point1 = aPointerEvent.iPosition  //記錄這次拖動的事件的位置

DrawNow();

}

 

 

這樣就可以實現矩形的拖動了,當然觸摸事件還沒有結束,還會相應一個事件。

 

最後會相應EButton1Down這個事件。

 

如果當初的是點擊下屏幕,那麼就只會有EButton1DownEButton1Down兩個事件。

 

所以最後是在處理時間的時候,寫下判斷條件,因爲handlePointerEvent一般是會調用兩邊的。

 

加上相應的觸摸後,基本3rd轉5th的工作就OK了。

 

最後是打包了,如果當時是3rd生成的工程,當然打包後可以直接用,但是一般會在安裝的時候提示軟件可能不兼容等等提示信息。這個時候開個UID就好。將pkg中的0x101F7961改爲0x1028315F。對於具體的UID的介紹可以看下一遍blog。

 

暫時先寫這麼多了,如果有說的不對和不足的地方,希望路過的大牛小牛,大神大嬸們留個腳印。

 

注:要想使用EDrag,別忘了在container的ConstructL中加一句EnableDragEvents();

 

這幾天又發現些問題,可能是3rd的開發習慣了,也有可能是對於觸摸事件處理沒有經驗的原因吧!出了些很理想化的問題。比如我一個簡單的點擊事件。我單純的認爲就會產生一個down和up事件,理論上是這樣,但是現實總是殘酷的。往往一些屏幕比較差的機器,在你想單純的產生一個點擊的事件(就是我們理想的down和up事件)的時候,往往都會產生一個EDrag(拖動)事件,所以大家在處理觸摸事件的時候,最好是將拖動距離很短的事件也判斷爲一個簡單的點擊事件。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章