Comment mettre en œuvre onTouchEvent avec un FragmentActivity
Ma Question: Est-il un travail autour de l'utilisation d'un onTouchEvent dans un FragmentActivity?
Ma Situation: je suis en train d'écrire une simple lampe de poche app et j'ai un FragmentActivity où un utilisateur peut glisser entre les couleurs (la totalité de l'écran est d'une seule couleur. Cette application est pour l'amélioration personnelle). Je veux être capable de faire un onLongPress
cas pour les options, un onDoubleTap
événement pour cacher la barre de navigation, et le plus important un événement tactile pour contrôler la luminosité de l'application (je veux permettre à l'utilisateur de défilement vers le haut et vers le bas pour les variations de luminosité, toutes les idées sont les bienvenus ici! est le onFling
événement bon pour cela?)
Ce que j'ai essayé: j'ai un GestureDetector
avec ma mise en œuvre d'un SimpleOnGestureListener
. Je remplace la onTouchEvent
dans le FragmentActivity
, mais j'ai juste trouvé que cette méthode n'est jamais appelé dans un FragmentActivity
(j'ai aussi testé avec un Log.print
dans la méthode et il n'est jamais appelé). Est-il un travail? Merci!
Saillants Code:
MainActivity:
public class MainActivity extends FragmentActivity {
private GestureDetector gestureDetector;
private FragmentPagerAdapter mAdapter;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
gestureDetector = new GestureDetector(getApplicationContext(), new MyGestureListener(getWindow()));
mAdapter = new ColorFragmentAdapter(getSupportFragmentManager(), getDefaultColorList());
ViewPager pager = (ViewPager) super.findViewById(R.id.viewpager);
pager.setAdapter(mAdapter);
pager.setCurrentItem(Math.round(mAdapter.getCount() / 2)); //Set current fragment to middle fragment
}
@Override
public boolean onTouchEvent(MotionEvent event) {
print("Sending touch event to gestureDetector.");
//This line is never run.
return gestureDetector.onTouchEvent(event);
}
/**
* Prints the given object to the log with the debug priority with the tag FLASHLIGHT
*
* @param object
*/
public static void print(Object object) {
Log.println(Log.DEBUG, "FLASHLIGHT", object.toString());
}
}
MyGestureListener :
public class MyGestureListener extends SimpleOnGestureListener {
private final Window window;
public MyGestureListener(Window window) {
super();
this.window = window;
}
@Override
public void onLongPress(MotionEvent e) {
//onLongPress code
}
@Override
public boolean onDoubleTap(MotionEvent e) {
//onDoubleTap code
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
//onFling cod
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<android.support.v4.view.ViewPager
android:id="@+android:id/viewpager"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
Je ne pense pas que vous auriez besoin de rien d'autre pour répondre à la question, mais laissez-moi savoir si vous le faites.
voir mise à jour.
Le manque de toucher les événements à partir de l'activité sont les plus susceptibles happeing en raison de la
ViewPager
et/ou les fragments de la ViewPager
. Le onTouchEvent
méthode de la Activity
sera appelée que si le point de vue à elle n'a pas à gérer l'événement tactile. Aussi, si je ne me trompe pas, vous devez également mettre en œuvre onDown
dans le SimpleGestureListener
de retour true
.Est-il un moyen de surmonter cette @Luksprog?
Avez-vous également de mettre en œuvre la
onDown
méthode dans le geste auditeur? Qu'avez-vous dans ces fragments? Tous les événements tactiles auditeurs de là-bas?
OriginalL'auteur kentcdodds | 2012-10-29
Vous devez vous connecter pour publier un commentaire.
Donc la solution à cela est relativement facile. Le problème est que le ViewPager est de manger de la touche de l'événement. Donc, ce que j'ai écrit ma propre mise en œuvre d'un ViewPager et surdéfini la
onTouchEvent(MotionEvent event)
méthode en appelantsuper.onTouchEvent(event)
et en passant ensuite à l'événement pour la gestureDetector au sein de la classe.Code:
MainActivity
MyViewPager
MyGestureListener
layout_main.xml
OriginalL'auteur kentcdodds
essayez de faire cela:
et sur la TouchEvent ce:
Source
onTouchEvent
méthode que je suis prépondérant dans l'activité (et à qui vous faites référence) n'est jamais appelée. Votre réponse ne va pas résoudre le problème.Mais merci d'essayer! Et bienvenue sur StackOverflow 🙂
haha merci désolé couldnt aider
OriginalL'auteur Heysus Escobar
Si vous voulez juste tout simplement de détecter lorsqu'un utilisateur touche sur le fragmentActivity utiliser la méthode suivante:
Plus d'infos sur : http://developer.android.com/reference/android/support/v4/app/FragmentActivity.html
OriginalL'auteur Basher51