我试图在事件 MotionEvent.ACTION_MOVE 发生时获取指针 id。
我通过调用 event.getActionIndex() 来做到这一点,但对于第二个、第三个、第四个和第五个手指,它总是返回 0。
我在 Galaxy S I9000 上使用 Gingerbread 2.3.3
这是我的代码
switch (event.getActionMasked()) {
case MotionEvent.ACTION_MOVE: {
Log.d("D"," getActionIndex()="+event.getActionIndex());
};break;
}
这是调试结果
05-02 19:20:08.628: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=1
05-02 19:20:08.781: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=1
05-02 19:20:08.820: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=1
05-02 19:20:08.914: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=1
05-02 19:20:09.070: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=2
05-02 19:20:09.187: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=2
05-02 19:20:09.324: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=2
05-02 19:20:09.460: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=2
05-02 19:20:09.523: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=2
05-02 19:20:09.542: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=2
05-02 19:20:09.679: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=3
05-02 19:20:09.703: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=3
05-02 19:20:09.847: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=3
05-02 19:20:10.117: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=3
05-02 19:20:10.261: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=4
05-02 19:20:10.281: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=4
05-02 19:20:10.304: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=4
05-02 19:20:10.371: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=4
05-02 19:20:10.410: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=4
05-02 19:20:10.433: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=4
05-02 19:20:10.519: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=4
05-02 19:20:10.558: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=4
05-02 19:20:10.613: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=3
05-02 19:20:10.640: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=2
05-02 19:20:10.656: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=1
我使用 3 种方法来委托鼠标事件的责任。它在我的 2.3 HTC Desire S 上运行良好。它能够捕获多个触摸事件。
public void processMouseMove(int mouseX, int mouseY, int pid)
public void processMouseDown(int mouseX, int mouseY, int pid)
public void processMouseUp(int mouseX, int mouseY, int pid)
public boolean onTouch(View v, MotionEvent event) {
int p = event.getActionIndex();
switch(event.getActionMasked()){
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
processMouseDown((int)event.getX(p), (int)event.getY(p), event.getPointerId(p));
break;
case MotionEvent.ACTION_POINTER_UP:
case MotionEvent.ACTION_UP:
processMouseUp((int)event.getX(p), (int)event.getY(p), event.getPointerId(p));
break;
case MotionEvent.ACTION_MOVE:
final int historySize = event.getHistorySize();
final int pointerCount = event.getPointerCount();
for (int h = 0; h < historySize; h++) {
for (int p1 = 0; p1 < pointerCount; p1++) {
processMouseMove((int)event.getHistoricalX(p1, h), (int)event.getHistoricalY(p1, h), event.getPointerId(p1));
}
}
for (int p1 = 0; p1 < event.getPointerCount(); p1++) {
processMouseMove((int)event.getX(p1), (int)event.getY(p1), event.getPointerId(p1));
}
}
return true;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)