Methode onTouchEvent wird nicht aufgerufen

Ich habe ein Problem, dass meine Methode

@Override public boolean onTouchEvent(MotionEvent event) { return gestureDetector.onTouchEvent(event); } 

Ist neuere genannt. Irgendwelche Ideen warum ist das so? Ich baue eine Google AIP 4.0.3 Anwendung, und ich bin Trzing, um Swipes für meine Ansicht zu aktivierenFliper. Allerdings kann es nicht funktionieren, wenn auf Berührung neuere aufgerufen wird.

  • Wie kann ich feststellen, ob ein geopoint im aktuell sichtbaren Bereich angezeigt wird?
  • Bild-Array in Android
  • Vielfalt von HTTP-Fehlern bei der Kommunikation mit dem Server von Android App
  • ViewFlipper vs Fragments
  • Aktualisieren Sie bestimmte Schlüssel mit Firebase für Android
  • Ich möchte kein Fragment auf Veränderung auffrischen
  • Btw:

      public class MainActivity extends SherlockMapActivity implements ActionBar.TabListener { 

    Das ist die Erklärung meiner Tätigkeit. Und um Swipes zu erkennen, habe ich das implementiert:

      SimpleOnGestureListener simpleOnGestureListener = new SimpleOnGestureListener(){ @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) { float sensitvity = 50; if((e1.getX() - e2.getX()) > sensitvity){ SwipeLeft(); }else if((e2.getX() - e1.getX()) > sensitvity){ SwipeRight(); } return true; } }; GestureDetector gestureDetector= new GestureDetector(simpleOnGestureListener); 

    Danke!

    bearbeiten:

    Main.xml:

      <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <ViewFlipper android:id="@+id/ViewFlipper" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#ffffff" > <include android:layout_height="match_parent" layout="@layout/mymain" /> <include layout="@layout/secondmain" /> <include layout="@layout/thirdmain" /> <include layout="@layout/fourthmain" /> </ViewFlipper> </LinearLayout> 

    Edit2: alle meiner enthaltenen Layouts haben scrollview implementiert ist es möglich, dass scroll nimmt diese Ereignisse und behandeln sie. Und wie man Gesten erkennen kann, wenn ja?

  • Verwenden von Enums als benutzerdefinierte XML-Attribute
  • Wenn du "GoogleAuthUtil.getToken" anrufst, bekommst du einen "Offline-Zugriff"
  • Effektives Zwischenspeichern von Daten-Uploads in Android
  • Animiertes GIF anzeigen
  • SetX (), setTranslationX (), setY () und setTranslationY ()
  • Verwenden von Android MediaRecorder
  • 4 Solutions collect form web for “Methode onTouchEvent wird nicht aufgerufen”

    Nun finde ich eine perfekte Lösung. Ich migrierte neue Methode:

      @Override public boolean dispatchTouchEvent(MotionEvent event) { View v = getCurrentFocus(); boolean ret = super.dispatchTouchEvent(event); 

    Und jetzt geht alles gut!

    Vielen Dank für alles, um mir zu helfen, hier zu kommen …

    Bearbeiten:

    Mein letzter Code:

     @Override public boolean dispatchTouchEvent(MotionEvent event) { View v = getCurrentFocus(); if (v instanceof EditText) { View w = getCurrentFocus(); int scrcoords[] = new int[2]; w.getLocationOnScreen(scrcoords); float x = event.getRawX() + w.getLeft() - scrcoords[0]; float y = event.getRawY() + w.getTop() - scrcoords[1]; if (event.getAction() == MotionEvent.ACTION_UP && (x < w.getLeft() || x >= w.getRight() || y < w.getTop() || y > w .getBottom())) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getWindow().getCurrentFocus() .getWindowToken(), 0); } } boolean ret = super.dispatchTouchEvent(event); return ret; } 

    Ok, jetzt bin ich mir sicher, dass das Problem ist, dass Scrollview-Handle berührt, also sowieso, um das zu ignorieren und doch das Scrollen zu spielen?

    Ja, das ist das Problem, wenn Androide Handles Berührung Ereignisse jedes Ereignis geht von Kind zu Eltern, so dass es zuerst von ViewFlipper behandelt wird, aber dann geht es auf ScrollView. Also musst du getParent () implementieren. RequestDisallowInterceptTouchEvent (true) (siehe ViewParent-Klasse ), um alle Touch-Events von ViewFlipper zu behandeln und dann einfach die Richtung der Geste zu erkennen, wenn die Horizontale dann die Ansicht, Oder scrollen Sie einfach scrollView programmgesteuert

    EDIT: Du kannst auch OnTouchListener in deinem ViewFlipper implementieren und in diesem Hörer gestureDetector.onTouchEvent (Event) auslösen, aber das erfordert auch requestDisallowInterceptTouchEvent deiner übergeordneten Ansicht auf true gesetzt

    Wie ich in Gabrjans Post kommentiert habe, dass dies bei der Berührung des Bildschirms kontinuierlich ausgelöst wird, gibt es eigentlich einen einfachen Weg, um nur die Touch-Down-Events zu bekommen:

     @Override public boolean dispatchTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { System.out.println("TOUCH DOWN!"); //set immersive mode here, or whatever... } return super.dispatchTouchEvent(event); } 

    Dies war sehr nützlich für mich, um das Android in immersive Modus, wenn jeder Teil des Bildschirms wurde berührt, unabhängig davon, welches Element. Aber ich wollte nicht mehrmals den Tauchmodus einstellen!

    Alle Gesten und Berührungsveranstaltungen gehen auf das niedrigste Element in der Hierarchie, die damit umgehen können. Wenn du also einen Listener in das enthaltene Layout hast, kannst du ((TypeOfParrent)yourView.getParent()).onTouchEvent(event) um das Ereignis an den gewünschten Handler zu delegieren.

    HINZUFÜGEN: Ich empfehle Ihnen, ViewPager für das ViewPager von Ansichten zu verwenden. Im ViewPager musst du dein eigenes onGestureListener nicht implementieren.

    http://www.edumobile.org/android/android-beginner-tutorials/view-pager-example-in-android-development/

    http://developer.android.com/reference/android/support/v4/view/ViewPager.html

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.