多点触控 - PointerIndex超出范围

时间:2013-12-18 20:39:42

标签: android multi-touch ontouchlistener pinch motionevent

我尝试修复当我在应用中添加多点触控功能时出现在我的代码中的问题。 问题似乎来自ACTION_POINTER_DOWN:

private float oldDist = 0;
backCard.setOnTouchListener(new OnTouchListener() {
@Override
        public boolean onTouch(View v, MotionEvent me) {

            switch(me.getAction()){
            case MotionEvent.ACTION_DOWN:
                    firstX = (int) me.getX();
            case MotionEvent.ACTION_POINTER_DOWN:
                if(me.getPointerCount() >= 2){
                    oldDist = getSpacing(me);
                    System.out.println(oldDist);
                }                       
                break;
            case MotionEvent.ACTION_MOVE:
                    float newDist = getSpacing(me);
                    if(newDist - oldDist > 200 && oldDist != 0){
                       System.out.println("Enabled");
                    }
                break;
            case MotionEvent.ACTION_UP:         
            case MotionEvent.ACTION_POINTER_UP:
                break;
            }
            return true;

        }
 private float getSpacing(MotionEvent me){
            float difx = me.getX(0) - me.getX(1);
            float dify = me.getY(0) - me.getY(1);
            float spacing = (float) Math.sqrt(difx*difx + dify*dify);
            return spacing;
        }
 });

当我在ACTION_POINTER_DOWN中没有getPointerCount()条件的情况下使用它时,我有一个超出范围的错误。但是,如果我使用条件,日志不会显示我在代码中打印的任何内容。 (当然我用2个手指!:)),所以条件永远不会成立,即使几个手指同时触摸屏幕。

我该如何解决?谢谢。

我的设备是GS3。

1 个答案:

答案 0 :(得分:1)

使用me.getActionMasked()代替me.getAction()