網頁

2010年6月19日 星期六

Android 多點觸控

Android 的多點觸控以現在的api來看 最多3點觸控
於程式中加入
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
即可抓取觸控的座標以及事件
x[0] = (int) event.getX(0); //單點觸控的座標
y[0] = (int) event.getY(0);
x[1] = (int) event.getX(1); //第二點觸控的座標
y[1] = (int) event.getY(1);
x[2] = (int) event.getX(2);//第三點觸控的座標
y[2] = (int) event.getY(2);

可惜的是我拿得是 DESIRE 最多兩點觸控,第三點是沒有作用的,且有交叉誤判的現象

抓取事件
if (event.getAction() == MotionEvent.ACTION_MOVE )
{
這個事件在模擬與實機有很大的出入,模擬器只會移動一下觸發一次,而實機摸下去之後不管有沒有移動 都會瘋狂的觸發。
}
if (event.getAction() == MotionEvent.ACTION_DOWN )
{
指尖按下
}
if (event.getAction() == MotionEvent.ACTION_OUTSIDE )

if (event.getAction() == MotionEvent.ACTION_POINTER_1_DOWN )
基本上 如果使用了 MotionEvent.ACTION_DOWN 這個事件永遠不會觸發
if (event.getAction() == MotionEvent.ACTION_POINTER_2_DOWN )
第二點按下
if (event.getAction() == MotionEvent.ACTION_POINTER_3_DOWN )
{
第三點按下
}
if (event.getAction() == MotionEvent.ACTION_POINTER_3_UP )
{
第三點放開 兩點觸控的 也不會產生這個事件
}



好了看完很多疑問,為什麼point 1 23 的 move
兩點原因
1.不管是哪個點移動 都是觸發 move 旗標
2.按下去之後就瘋狂觸發所以乾脆三點都檢查


move up 1 2
要由一系列動作解釋

按下第一鍵
觸發 down

按下第二鍵
觸發 point 2 down

放開第二鍵 觸發
觸發 point 2 up

放開第一鍵 觸發 up (注意不是point 1 up)



再次實驗

按下第一鍵
觸發 down

按下第二鍵
觸發 point 2 down

放開第一鍵 觸發
觸發 point 1 up
這時候 本來的point 2 變成point 1 座標 也變成由point 1取得雖然他應該是第二鍵

放開第一鍵 觸發 up (注意不是point 2 up)

2 則留言:

賴泓錡 提到...
作者已經移除這則留言。
賴泓錡 提到...

這個事件在模擬與實機有很大的出入,模擬器只會移動一下觸發一次,而實機摸下去之後不管有沒有移動 都會瘋狂的觸發。


有關於這一段 想請問 有辦法只讓他觸發一次就結束 等待下一次觸發嗎??