最近一直在弄移植,將3rd的程序移植到5th上,個人感覺,如果使用的都是系統控件的話,那麼工程將要改動的地方很少。可能主要的工作就是添加上觸摸事件。如果你的前任將接口或者代碼寫的比較好的話,那麼恭喜你改起來會相當容易。
說一下我的心得吧,剛剛接觸觸摸事件,有點不大適應。會用的也就EButton1Down
,EButton1Up這兩個事件,至於拖動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
這個事件。
如果當初的是點擊下屏幕,那麼就只會有
EButton1Down
和EButton1Down
兩個事件。
所以最後是在處理時間的時候,寫下判斷條件,因爲handlePointerEvent一般是會調用兩邊的。
加上相應的觸摸後,基本3rd轉5th的工作就OK了。
最後是打包了,如果當時是3rd生成的工程,當然打包後可以直接用,但是一般會在安裝的時候提示軟件可能不兼容等等提示信息。這個時候開個UID就好。將pkg中的0x101F7961改爲0x1028315F。對於具體的UID的介紹可以看下一遍blog。
暫時先寫這麼多了,如果有說的不對和不足的地方,希望路過的大牛小牛,大神大嬸們留個腳印。
注:要想使用EDrag,別忘了在container的ConstructL中加一句EnableDragEvents();
這幾天又發現些問題,可能是3rd的開發習慣了,也有可能是對於觸摸事件處理沒有經驗的原因吧!出了些很理想化的問題。比如我一個簡單的點擊事件。我單純的認爲就會產生一個down和up事件,理論上是這樣,但是現實總是殘酷的。往往一些屏幕比較差的機器,在你想單純的產生一個點擊的事件(就是我們理想的down和up事件)的時候,往往都會產生一個EDrag(拖動)事件,所以大家在處理觸摸事件的時候,最好是將拖動距離很短的事件也判斷爲一個簡單的點擊事件。