Question

I try to fix an issue which appears in my code when I added multitouch functions in my app. The problem seems to come from 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;
        }
 });

When I use it without the getPointerCount() condition in ACTION_POINTER_DOWN, I have an out of range error. But if I use the condition, the log doesn't show anything I print in the code. (Of course I use 2 fingers ! :) ), so the condition is never true, even if several fingers touch the screen at the same time.

How can I fix that ? Thank you.

My device is a GS3.

Was it helpful?

Solution

Use me.getActionMasked() instead of me.getAction()

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top