2013-09-04 18 views
7

Il [GestureDetector.OnGestureListener] [1] classe ha il metodo [onSingleTapUp (MotionEvent)] [2]:differenza tra clic e toccare in Android

avviso quando un rubinetto si verifica con l'up MotionEvent que innescato esso.

Questo metodo ha la stessa funzione di onclick? Posso usare questo metodo per implementare lo stesso comportamento che voglio dal metodo onclick?

risposta

0

Ho effettuato alcuni test e sembra che la risposta sia SI, è possibile utilizzare onSingleTapUp anziché onclick. Il metodo onSingleTapUp può differenziare facilmente un semplice clic di un doppio o di un clic lungo. La mia prova:

public class MainFragmentScrollerController 
{ 
    private MainFragment mFragment; 
    private GestureDetectorCompat mGestureDetector; 

    public MainFragmentScrollerController(MainFragment fragment) 
    { 
     mFragment = fragment; 
     mGestureDetector = new GestureDetectorCompat(mFragment.getActivity(), new GestureListener()); 
    } 

    public void setGestureListener() 
    { 
     mFragment.myView.setOnTouchListener(new OnTouchListener() 
     { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) 
      { 
       boolean gestureResult = mGestureDetector.onTouchEvent(event); 
       Log.i("GestureListener", "gestureResult = " + gestureResult); 
       return gestureResult; 
      } 
     }); 
    } 

    public class GestureListener extends SimpleOnGestureListener 
    { 
     private final String TAG = "GestureListener"; 
     @Override 
     public boolean onDown(MotionEvent event) 
     { 
      Log.d(TAG,"onDown: " + event.toString()); 
      return true; 
     } 

     @Override 
     public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) 
     { 
      Log.d(TAG, "onFling: " + event1.toString()+event2.toString()); 
      return true; 
     } 

     @Override 
     public boolean onScroll(MotionEvent event1, MotionEvent event2, float distanceX, float distanceY) 
     { 
      Log.d(TAG, "onScroll: " + event1.toString()+event2.toString()); 
      return true; 
     } 

     @Override 
     public boolean onSingleTapUp(MotionEvent event) 
     { 
      Log.d(TAG, "onSingleTapUp: " + event.toString()); 
      return true; 
     } 

     @Override 
     public void onLongPress(MotionEvent event) 
     { 
      Log.d(TAG, "onLongPress: " + event.toString()); 
     } 
    } 
} 

Risultato per semplice click:

09-04 14:20:58.040: D/GestureListener(17689): onDown: MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=188.71875, y[0]=26.0625, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=34463725, downTime=34463725, deviceId=1, source=0x1002 } 
09-04 14:20:58.040: I/GestureListener(17689): gestureResult = true 
09-04 14:20:58.100: I/GestureListener(17689): gestureResult = false 
09-04 14:20:58.130: D/GestureListener(17689): onSingleTapUp: MotionEvent { action=ACTION_UP, id[0]=0, x[0]=188.71875, y[0]=26.0625, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=34463811, downTime=34463725, deviceId=1, source=0x1002 } 
09-04 14:20:58.130: I/GestureListener(17689): gestureResult = true 

Risultato a lungo click:

09-04 14:22:12.520: D/GestureListener(17689): onDown: MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=179.22656, y[0]=41.0625, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=34538199, downTime=34538199, deviceId=1, source=0x1002 } 
09-04 14:22:12.520: I/GestureListener(17689): gestureResult = true 
09-04 14:22:12.560: I/GestureListener(17689): gestureResult = false 
09-04 14:22:12.930: I/GestureListener(17689): gestureResult = false 
09-04 14:22:12.950: I/GestureListener(17689): gestureResult = false 
09-04 14:22:13.010: I/GestureListener(17689): gestureResult = false 
09-04 14:22:13.100: I/GestureListener(17689): gestureResult = false 
09-04 14:22:13.130: I/GestureListener(17689): gestureResult = false 
09-04 14:22:13.150: I/GestureListener(17689): gestureResult = false 
09-04 14:22:13.180: I/GestureListener(17689): gestureResult = false 
09-04 14:22:13.200: D/GestureListener(17689): onLongPress: MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=179.22656, y[0]=41.0625, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=34538199, downTime=34538199, deviceId=1, source=0x1002 } 
09-04 14:22:13.230: I/GestureListener(17689): gestureResult = false 

Risultato per la scappatella:

09-04 14:24:09.650: D/GestureListener(17689): onDown: MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=332.15625, y[0]=2.625, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=34655337, downTime=34655337, deviceId=1, source=0x1002 } 
09-04 14:24:09.650: I/GestureListener(17689): gestureResult = true 
09-04 14:24:09.690: D/GestureListener(17689): onScroll: MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=332.15625, y[0]=2.625, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=34655337, downTime=34655337, deviceId=1, source=0x1002 }MotionEvent { action=ACTION_MOVE, id[0]=0, x[0]=331.9604, y[0]=-72.36835, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=2, eventTime=34655368, downTime=34655337, deviceId=1, source=0x1002 } 
09-04 14:24:09.690: I/GestureListener(17689): gestureResult = true 
09-04 14:24:09.710: D/GestureListener(17689): onScroll: MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=332.15625, y[0]=2.625, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=34655337, downTime=34655337, deviceId=1, source=0x1002 }MotionEvent { action=ACTION_MOVE, id[0]=0, x[0]=337.91425, y[0]=-124.40411, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=2, eventTime=34655385, downTime=34655337, deviceId=1, source=0x1002 } 
09-04 14:24:09.710: I/GestureListener(17689): gestureResult = true 
09-04 14:24:09.730: D/GestureListener(17689): onFling: MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=332.15625, y[0]=2.625, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=34655337, downTime=34655337, deviceId=1, source=0x1002 }MotionEvent { action=ACTION_UP, id[0]=0, x[0]=337.91425, y[0]=-124.40411, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=34655414, downTime=34655337, deviceId=1, source=0x1002 } 
09-04 14:24:09.730: I/GestureListener(17689): gestureResult = true 
Problemi correlati