2012-11-29 14 views
5

Ho esaminato numerosi esempi online e tutti hanno gesturelistener implementato in questo modo. Non riesco a far sì che Android recuperi l'evento gesture il valore di myText non cambia e non ottengo alcun output in logcat. Che cosa sto facendo di sbagliato?GestureListener Android non rileva eventi

public class MainActivity extends Activity { 
private GestureDetector gDetector; 
private TextView myText; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    gDetector = new GestureDetector(this, new MyOnGestureListener()); 
    myText = (TextView) findViewById(R.id.mytext); 
    myText.setText("Test"); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 

    return true; 
} 

class MyOnGestureListener extends SimpleOnGestureListener implements 
     OnGestureListener { 
    @Override 
    public boolean onDown(MotionEvent e) { 
     Log.d("Main", "did"); 
     myText.setText("hi"); 
     // TODO Auto-generated method stub 
     return true; 
    } 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
      float velocityY) { 
     myText.setText("hi"); 
     Log.d("Main", "did"); 
     // TODO Auto-generated method stub 
     return true; 
    } 

    @Override 
    public void onLongPress(MotionEvent e) { 
     Log.d("Main", "did"); 
     myText.setText("hi"); 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, 
      float distanceX, float distanceY) { 
     Log.d("Main", "did"); 
     myText.setText("hi"); 
     // TODO Auto-generated method stub 
     return true; 
    } 

    @Override 
    public void onShowPress(MotionEvent e) { 
     Log.d("Main", "did"); 
     myText.setText("hi"); 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent e) { 
     Log.d("Main", "did"); 
     myText.setText("hi"); 
     // TODO Auto-generated method stub 
     return true; 
    } 
} 

}

risposta

7

La parte mancante è che non si colleghi il tuo GestureListener a un evento di tocco.

Così si può ignorare OnTouchListener in questo modo:

@Override 
public boolean onTouchEvent(MotionEvent me) { 
    return gDetector.onTouchEvent(me); 
} 

O se si vuole abilitare il GestureDetector su una vista specifica:

view.setOnTouchListener(new OnTouchListener{ 
    @Override 
    public boolean onTouchEvent(MotionEvent me) { 
     return gDetector.onTouchEvent(me); 
    } 
}) 
+0

Ehi, sto cercando di applicare un rilevatore gesto per un MapView. Sto usando il metodo che hai descritto, dove ho definito la mia classe GestureDetector e sto chiamando mMapView.setOnTouchListner() nel modo che descrivi qui. Non ricevo hit su onTouchEvent(). Puoi dirmi perché? – KairisCharm

0

provare questo codice here

Questo dovrebbe funzionare.

cambia anche la linea

gestureScanner = new GestureDetector(this); 

a

gestureScanner = new GestureDetector(ScrollTest.this, this); 
4

È necessario utilizzare il gDetector campo. Finora, hai creato solo un'istanza, ma ora devi usarla per ricavarne i frutti.

Ad esempio come questo:

this.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(final View view, final MotionEvent event) { 
     return gDetector.onTouchEvent(event); 
    } 
}); 
Problemi correlati