Android Multi-Touch无响应

时间:2014-08-04 14:02:50

标签: android multi-touch

我正在尝试构建一个使用多点触控的应用程序。我正在使用'getActionMasked()' 获取当前操作,然后检查指针计数是否为2。

代码怎么还没有像我期望的那样工作。

我面临的问题主要有两个。

  1. '双指触摸'根本不工作。
  2. 'MotionEvent.ACTION_UP'未执行。
  3. 以下是代码:

    imgs.setOnTouchListener(new OnTouchListener() {
    
                @Override
                public boolean onTouch(View arg0, MotionEvent m) {
                    // TODO Auto-generated method stub
    
                    //Prevent false touch events
                    long now = System.currentTimeMillis();
                    if (lastTime > -1 && (now - lastTime) < threshold) {
                        // Return if a touch event was receive less than "threshold" time ago
                        return true;
                    }
    
                    lastTime = now;
    
                    switch(m.getActionMasked()){
                        case MotionEvent.ACTION_DOWN:
                            td = System.currentTimeMillis();
                            int pointerCount = m.getPointerCount();
                            if (pointerCount == 2){
                                //Do Work here. [Not Working]
                            }
                            return true;
                        case MotionEvent.ACTION_UP:
                            //Do Work here. [Not Working]
                            return true;
                    }
                    return arg0.onTouchEvent(m);
                }
            });
    

    我不确定我做错了什么。期待在这方面得到一些帮助,并对我做错了一些澄清。

1 个答案:

答案 0 :(得分:0)

我认为setOnTouchListener只适用于单指,所以你永远不会得到两个手指事件。 您可以使用onTouchEvent(View v,MotionEvent e),

public class yourview extends view(
@Override  
public boolean onTouchEvent(MotionEvent m) {
    int pointerCount = m.getPointerCount();
    switch (m.getAction() & MotionEvent.ACTION_MASK) {
        //case 
        case MotionEvent.ACTION_POINTER_DOWN:             
             if (pointerCount == 2){
              //do what you want here.
             }
        //case
    }
    return true;

}