1. 程式人生 > >Android-單點觸控-多點觸控

Android-單點觸控-多點觸控

<一>Android事件處理:

1、Android提供了兩種方式的事件處理:

(1)

回撥事件處理:通過重寫元件特定的方法實現回撥事件處理,事件的發生者和事件的處理者是同

一個物件

監聽器的事件處理:通過編寫監聽類繫結元件實現監聽事件處理,事件的發生者和事件的處理者

不是同一個物件

(2)從小範圍擴充套件到到大範圍(myButton---->Activity),由監聽事件返回的true或false決定

是否傳播,如果為true就不傳播,為false就傳播

(3)好處:開發出介面友好人機互動良好的Android應用

(4)常用的監聽器

監聽點選事件:View.OnclickListener

監聽長按事件:View.OnLongClikListener

監聽觸控事件:View.OnTouchListener

監聽焦點改變:View.OnFocusChangeListener

與長按監聽一起使用,生成選單:View.OnCreateContextMenuListener

<二>觸控事件解析:
觸控處理方法的返回值是控制觸控事件的傳播性的。
<1>當返回值為false時,代表本方法對這次觸控事件不感興趣,這次觸控的時間序列的後續動作

處理就會轉交給上一級,本方法不再理會。
<2>當返回值為true時,代表本方法對這次觸控事件感興趣,這次觸控事件序列的後續動作就會直

接由該方法處理,不會再傳播給上一級
<3>當按鈕的觸控監聽事件和按鈕的觸控回撥事件同時存在,取決權決與:按鈕的觸控監聽事件
觸控操作是由一系列的動作組成,一次觸控至少包含一次手指的按下、移動、擡起3個事件

onTouch()方法:

單點觸控時:
action=0 代表手指按下
action=1 代表手指擡起
action=2 代表手指移動


多點觸控時:
aciton=0   代表手指1按下
action=261 代表手指2按下
action=517 代表手指3按下
action=518 代表手指3擡起
action=262 代表手指2擡起
action=1   代表手指1擡起

注意:在多點觸控時,獲得的action的值是一個複合碼,這個複合碼是一個八位的十六進位制數
      第二個手指按下,action=261,對應的十六進位制數為0X00000105,其中第2個位元組01代表手指

的指標索引,第一個位元組05是它的動作編碼,按下事件,06代表擡起

無論是單點觸控,還是多點觸控,手指移動的action都是=2

獲得螢幕上的手指的數量:event.getPointerCount()

指標索引:每一個手指按照順序編號,隨著螢幕上的手指數量的不同,每一個手指的指標索引會
發生改變

指標id:event.getPointerId(指標索引),相當於每一個手指的名字,一旦確定不再變化
獲得每一個手指的座標:
float x=event.getX(指標索引);
float y=event.getY(指標索引);
注意:預設(不帶引數的)獲取到的x和y是索取第一個手指的座標

解析手指的action,拿到每一個pointIndex和action_code

int pointIndex=action>>8;
int action_code=action&0x00000ff;