Geste dans listview android
salut j'ai ajouter un geste de ma listview,je veux mettre en œuvre les mêmes fonctionnalités de l'application contact.
quand j'ai quitté glissez-il doit envoyer un message,balayage à droite, il devrait appeler. quelqu'un peut m'aider comment faire ceux détection de mouvement... j'ai mis en œuvre dans les différents autres points de vue... mais je ne pouvais pas faire de liste... je ne sais pas ce que va worng...
mon code est"
/** Called when the activity is first created. */
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
//Create an array of Strings, that will be put to our ListActivity
String[] names = new String[] { "Linux", "Windows7", "Eclipse", "Suse", "Ubuntu", "Solaris", "Android", "iPhone"};
//Create an ArrayAdapter, that will actually make the Strings above
//appear in the ListView
this.setListAdapter(new ArrayAdapter<String>(this, R.id.MyList, names));
gestureListener = new ListView.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
}
return false;
}
};
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
//Get the item that was clicked
Object o = this.getListAdapter().getItem(position);
String keyword = o.toString();
Toast.makeText(this, "You selected: " + keyword, Toast.LENGTH_LONG).show();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event))
return true;
else
return false;
}
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) {
return false;
//right to left swipe
}
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Context ctx = getApplicationContext();
CharSequence txt = "Right to Left Swipe";
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(ctx, txt, duration);
toast.show();
Toast.makeText(this.getItem(lv.pointToPosition((int)e1.getX(),(int) e1.getY())));
//return super.onFling();
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Context ctx = getApplicationContext();
CharSequence txt = "Left to Right Swipe";
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(ctx, txt, duration);
toast.show();
}
} catch (Exception e) {
//nothing
}
return false;
}
}
source d'informationauteur Ads
Vous devez vous connecter pour publier un commentaire.
Basée sur les réponses de poste [#937313][1] (merci à la gav et paiego), j'ai battu le code suivant à reconnaître des gestes simples (horizontal de glisse) sur la liste.
Cependant, après une aventure de l'opération, la liste est
onItemClick()
écouteur sera trop! Par conséquent, vous vous retrouvez avec un partenaire et un supplément de onItemClick(). Je pense que c'est parce qu'Android envoie un élément-cliquez sur l'événement sur chaque bouton, n'importe comment loin l'utilisateur a déplacé son doigt. Pour remédier à cela, au lieu d'enregistrer une habitudeOnItemClickListener()
j'ai ma propre méthodemyOnItemClick()
. Puis-je remplacer laSimpleOnGestureListener.onSingleTapUp()
méthode, de sorte que lorsque le doigt est, cette méthode appelle myOnItemClick() manuellement.Jusqu'à présent, cette méthode fonctionne très bien pour moi. Pas de plaintes :-).
--Édité---
Si vous êtes venu ici de google, je veux juste vous dire que, bien que cette solution fonctionne encore, constructeur de GestureDetector est obsolète.
Si vous voulez mettre en œuvre les gestes de balayage sur votre application android vous pouvez envisager d'utiliser cette bibliothèque: https://github.com/liuzc/android-swipelistview
Ou celui-ci (les balayages de travail tout comme gmail): https://github.com/nhaarman/ListViewAnimations