MyGestureDetector s'étend SimpleOnGestureListener
Je me suis mise en œuvre d'un MyGestureDetector qui s'étend d'un SimpleOnGestureListener. J'ai emprunté la classe à partir de: http://www.codeshogun.com/blog/tag/view-flipper/ pour permettre une action de balayage dans un ViewFlipper. Je ne peux pas obtenir si la fonction de l'émulateur. Des suggestions?
Ci-dessous est tout le code:
L'main.java
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.MotionEvent;import android.view.View;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.webkit.WebView;
import android.widget.ViewFlipper;
public class main extends Activity {
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
private GestureDetector gestureDetector;
View.OnTouchListener gestureListener;
private Animation slideLeftIn;
private Animation slideLeftOut;
private Animation slideRightIn;
private Animation slideRightOut;
private ViewFlipper viewFlipper;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//---------------------------------Sets Swipe Animation to Next View -->
viewFlipper = (ViewFlipper)findViewById(R.id.AC4313);
slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in);
slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out);
slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in);
slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out);
gestureDetector = new GestureDetector(new MyGestureDetector());
gestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
}
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) {
viewFlipper.setInAnimation(slideLeftIn);
viewFlipper.setOutAnimation(slideLeftOut);
viewFlipper.showNext();
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
viewFlipper.setInAnimation(slideRightIn);
viewFlipper.setOutAnimation(slideRightOut);
viewFlipper.showPrevious();
}
} catch (Exception e) {
//nothing
}
return false;
}
}
@Override //------------------------------ Catch the Gesture Event by Overriding onTouch() method: -->
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event))
return true;
else
return false;
}
Le anim *.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="800"/>
</set>
Quel est le comportement?
FWIW, je l'ai déjà mis en place un
Avez-vous essayé sur un appareil? Je ne suis pas sûr que l'émulateur peut gérer jette. Ce code est identique à ce que j'utilise, et j'en fonction de la mine sur le même site web que vous avez lié. Il fonctionne pour moi sur les périphériques réels, mais je ne l'ai jamais testé sur un émulateur.
Je vais vérifier la viewSwiper 2morrow - l'air très intéressant. Thnx!!
L'exécution de la ViewSwiper sur son propre fonctionne très bien sur à la fois l'émulateur & l'appareil. Mise en œuvre du code dans mon application, il ne le fait pas. Je pense que le problème se situe à ce que les enfants sont WebViews qui ont une longueur nécessitant un défilement up/dwn (?). J'ai là un travail autour de cela? c'est à dire: tourner le rouleau-er éteint lorsque l'utilisateur effectue lft/rght - et comment pourrais-je faire cela?
FWIW, je l'ai déjà mis en place un
ViewFlipper
avec swipe de support via un GestureDetector
: github.com/commonsguy/cwac-viewswiperAvez-vous essayé sur un appareil? Je ne suis pas sûr que l'émulateur peut gérer jette. Ce code est identique à ce que j'utilise, et j'en fonction de la mine sur le même site web que vous avez lié. Il fonctionne pour moi sur les périphériques réels, mais je ne l'ai jamais testé sur un émulateur.
Je vais vérifier la viewSwiper 2morrow - l'air très intéressant. Thnx!!
L'exécution de la ViewSwiper sur son propre fonctionne très bien sur à la fois l'émulateur & l'appareil. Mise en œuvre du code dans mon application, il ne le fait pas. Je pense que le problème se situe à ce que les enfants sont WebViews qui ont une longueur nécessitant un défilement up/dwn (?). J'ai là un travail autour de cela? c'est à dire: tourner le rouleau-er éteint lorsque l'utilisateur effectue lft/rght - et comment pourrais-je faire cela?
OriginalL'auteur | 2011-02-10
Vous devez vous connecter pour publier un commentaire.
Je pense que le problème est que vous ne pas écraser la
OnDown
événement. Ajouter ce bout de code à votreMyGestureDetector
classe, et il convient de travail.La
onDown
événement return false par défaut, et chaque geste de commencer aveconDown
de sorte que votreonFling
événement ne se déclenche pas.Istvan
OriginalL'auteur Istvan