J'essaie d'implémenter OnGestureListener dans Android.
J'ai trois TextViews dans ma mise en page.
Ce que j'essaie de réaliser, c'est de définir l'écouteur de geste pour deux des textViews.
Voici le layout -
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/rlMain"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" >
<TextView
Android:id="@+id/tvOne"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_centerHorizontal="true"
Android:layout_marginBottom="10dp"
Android:layout_marginTop="5dp"
Android:gravity="center"
Android:text="One" />
<TextView
Android:id="@+id/tvTwo"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_below="@+id/tvOne"
Android:layout_centerHorizontal="true"
Android:layout_marginBottom="10dp"
Android:layout_marginTop="5dp"
Android:gravity="center"
Android:text="Two" />
<TextView
Android:id="@+id/tvThree"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_below="@+id/tvTwo"
Android:layout_centerHorizontal="true"
Android:layout_marginBottom="10dp"
Android:layout_marginTop="5dp"
Android:gravity="center"
Android:text="Three" />
Et voici le activité -
import Android.app.Activity;
import Android.os.Bundle;
import Android.util.Log;
import Android.view.GestureDetector;
import Android.view.GestureDetector.OnGestureListener;
import Android.view.MotionEvent;
public class TimeActivity extends Activity implements OnGestureListener {
GestureDetector gestureScanner;
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.wheelview);
gestureScanner = new GestureDetector(this);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
return gestureScanner.onTouchEvent(event);
}
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
Log.i("Test", "On Fling");
return true;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
}
À l'heure actuelle, Fling est appelé pour les trois vues de texte.
Existe-t-il un moyen par lequel je peux définir le Gesture Listener pour certaines vues particulières dans la mise en page.
Toute aide sera grandement appréciée.
Faites cela dans votre méthode onCreate
.
findViewById(R.id.tvOne).setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event){
return gestureScanner.onTouchEvent(event);
}
});
Vous pouvez définir OnTouchListener
s sur des TextView
s individuels.
findViewById(R.id.tvOne).setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
// Your code here
}
}
Si vous ne voulez pas détecter tous les gestes, essayez cette classe: SimpleGestureListener créée par moi-même.
Voici maintenant quelques extraits pour l'utilisation de cette classe.
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private GestureDetector mDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SimpleGestureListener simpleGestureListener = new SimpleGestureListener();
simpleGestureListener.setListener(new SimpleGestureListener.Listener() {
@Override
public void onScrollHorizontal(float dx) {
Log.i(TAG,"horizontal = " +dx);
}
@Override
public void onScrollVertical(float dy) {
Log.i(TAG,"vertical = " +dy);
}
});
mDetector = new GestureDetector(this, simpleGestureListener);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
mDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
}
Il peut être utilisé pour détecter le geste de balayage: