2012-12-10 18 views
3

我嘗試使用的onFling方法實施2個手指刷卡。但是,我發現SimpleOnGestureListener不支持兩個手指觸摸。2個手指在Android中刷卡

我該如何解決?

+0

已經獲得國家的解決方案,如果是該部分的更詳細的文檔你可以在這裏提供代碼嗎? –

回答

1

你可以嘗試用MotionEvent.ACTION_POINTER_DOWN使用OnTouchListener這樣的:

button.setOnTouchListener(new View.OnTouchListener() { 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
      int action = motionEvent.getAction(); 

      switch(action & MotionEvent.ACTION_MASK) 
      { 
       case MotionEvent.ACTION_POINTER_DOWN: 
        Toast.makeText(MyActivity.this, " Two Fingers Tapped Once. Yeeeyy :)", 0).show(); 

        // set the mTwoFingersTapped flag to TRUE when we tap with 2 fingers at once 
        mTwoFingersTapped = true; 
        break; 
      } 
      return false; 
     } 
    }); 

Here是一個教程,說明如何,如果你需要更多的細節做到這一點。我希望這會有所幫助。

+0

嘿,謝謝。你能告訴我如何使用這個實現刷卡! – gauravsapiens

+0

不幸的是我對滑動並不太瞭解。也許有人可以幫忙。對不起:( – Laura

1

我的解決方案的工作原理,但它使用公共靜態int來計算有多少手指相當醜陋。我不得不將手指數設置回一個,因爲我不能再爲一個手指獲得action_pointer_down ......我不知道爲什麼......但是這個解決方案也適用於更多的手指......希望有人可以使用它在功能

public class RemoteFragment extends Fragment{ 

public static int fingercount = 1;  

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    final GestureDetector gdt = new GestureDetector(getActivity(), 
      new RemoteGestureListener()); 

    View view = inflater.inflate(R.layout.gestures, container, false); 

    view.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(final View view, final MotionEvent event) { 
      int action = event.getAction(); 

      switch (action & MotionEvent.ACTION_MASK) { 
      case MotionEvent.ACTION_POINTER_DOWN: 
       Log.d(TAG, 
         "Pointer-Count =" 
           + String.valueOf(fingerCount = event 
             .getPointerCount())); 

       break; 
      } 
      gdt.onTouchEvent(event); 
      return true; 
     } 
    }); 
    return view; 
} 
} 

public class RemoteGestureListener implements OnGestureListenerr { 

private final static String TAG = "RemoteGestureListener"; 

private static final int SWIPE_MIN_DISTANCE = 120; 
private static final int SWIPE_THRESHOLD_VELOCITY = 200; 


public RemoteGestureListener() { 
} 

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
     float velocityY) { 

    Log.d(TAG, "onFling"); 
    if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE 
      && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
     if (RemoteFragment.fingerCount == 1) { 
      Log.d(TAG, "Left Swipe"); 
     } else { 
      Log.d(TAG, "Left xFinger Swipe"); 
      RemoteFragment.fingerCount = 1; 
     } 
     return true; // Right to left 
    } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE 
      && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
     if (RemoteFragment.fingerCount == 1) { 
      Log.d(TAG, "Right Swipe"); 
     } else { 
      Log.d(TAG, "Right xFinger Swipe"); 
      RemoteFragment.fingerCount = 1; 
     } 
     return true; // Left to right 
    } 

    if (e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE 
      && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { 
     if (RemoteFragment.fingerCount == 1) { 
      Log.d(TAG, "Top Swipe"); 
     } else { 
      Log.d(TAG, "Top xFinger Swipe"); 
      RemoteFragment.fingerCount = 1; 
     } 
     return true; // Bottom to top 
    } else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE 
      && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { 
     if (RemoteFragment.fingerCount == 1) { 
      Log.d(TAG, "Bottom Swipe"); 
     } else { 
      Log.d(TAG, "Bottom xFinger Swipe"); 
      RemoteFragment.fingerCount = 1; 
     } 
     return true; 
    } 
    return true; 
} 
0

我做了a library前一段時間,使得實現1 /多指刷卡很方便。

你可以找到API here 實現示例,可以發現here

想要看就是

ImageView mv = (ImageView) findViewById(R.id.myview); 
final TextView grtv = (TextView) findViewById(R.id.gestureResultTextView); 
SimpleFingerGestures.DEBUG = true; 
SimpleFingerGestures.CONSUME_TOUCH_EVENTS = true; 
SimpleFingerGestures sfg = new SimpleFingerGestures(); 
sfg.setOnFingerGestureListener(new SimpleFingerGestures.OnFingerGestureListener() { 
@Override 
public boolean onSwipeUp(int fingers, long gestureDuration) { 
grtv.setText("swiped " + fingers + " up"); 
return false; 
} 
@Override 
public boolean onSwipeDown(int fingers, long gestureDuration) { 
grtv.setText("swiped " + fingers + " down"); 
return false; 
} 
@Override 
public boolean onSwipeLeft(int fingers, long gestureDuration) { 
grtv.setText("swiped " + fingers + " left"); 
return false; 
} 
@Override 
public boolean onSwipeRight(int fingers, long gestureDuration) { 
grtv.setText("swiped " + fingers + " right"); 
return false; 
} 
@Override 
public boolean onPinch(int fingers, long gestureDuration) { 
grtv.setText("pinch"); 
return false; 
} 
@Override 
public boolean onUnpinch(int fingers, long gestureDuration) { 
grtv.setText("unpinch"); 
return false; 
} 
}); 
mv.setOnTouchListener(sfg);