Der GestureDetector funktioniert nicht (Beispiel von Android-Entwickler)

Ich lese die Geste in Android bei Android-Entwickler, und nach dem Tutorial habe ich versucht, die folgenden Codes laufen:

public class MainActivity extends Activity implements OnGestureListener, OnDoubleTapListener { private static final String DEBUG_TAG = "Gestures"; private GestureDetectorCompat mDetector; // Called when the activity is first created. @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); View v = new RelativeLayout(this); v.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); setContentView(v); mDetector = new GestureDetectorCompat(this, this); mDetector.setOnDoubleTapListener(this); } @Override public boolean onTouchEvent(MotionEvent event) { this.mDetector.onTouchEvent(event); return super.onTouchEvent(event); } @Override public boolean onDown(MotionEvent event) { Log.d(DEBUG_TAG, "onDown: " + event.toString()); return true; } @Override public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) { Log.d(DEBUG_TAG, "onFling: " + event1.toString() + event2.toString()); return true; } @Override public void onLongPress(MotionEvent event) { Log.d(DEBUG_TAG, "onLongPress: " + event.toString()); } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { Log.d(DEBUG_TAG, "onScroll: " + e1.toString() + e2.toString()); return true; } @Override public void onShowPress(MotionEvent event) { Log.d(DEBUG_TAG, "onShowPress: " + event.toString()); } @Override public boolean onSingleTapUp(MotionEvent event) { Log.d(DEBUG_TAG, "onSingleTapUp: " + event.toString()); return true; } @Override public boolean onDoubleTap(MotionEvent event) { Log.d(DEBUG_TAG, "onDoubleTap: " + event.toString()); return true; } @Override public boolean onDoubleTapEvent(MotionEvent event) { Log.d(DEBUG_TAG, "onDoubleTapEvent: " + event.toString()); return true; } @Override public boolean onSingleTapConfirmed(MotionEvent event) { Log.d(DEBUG_TAG, "onSingleTapConfirmed: " + event.toString()); return true; } } 

Die Codes kamen von hier aus .

  • Android: Erkennung Fling Gesten
  • Wie man eine Android-Ansicht macht, die zwischen den Ansichten auf swipe / fling schlägt
  • Aber als ich die App lief, bekam ich keine Debug-Informationen, wenn ich anklicke oder lange die Ansicht betreibe.

    BTW, ich teste die app in emulator und htc e1 gerät.

    Was ist das Problem?

  • Android: Erkennung Fling Gesten
  • Wie man eine Android-Ansicht macht, die zwischen den Ansichten auf swipe / fling schlägt
  • 4 Solutions collect form web for “Der GestureDetector funktioniert nicht (Beispiel von Android-Entwickler)”

    Du schaffst einen GestureDetector, aber du wirst dich niemals "anhängen". Versuchen Sie, Ihr onCreate so zu ändern:

     super.onCreate(savedInstanceState); View v = new RelativeLayout(this); v.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); setContentView(v); mDetector = new GestureDetectorCompat(this, this); mDetector.setOnDoubleTapListener(this); v.setOnTouchListener(new OnTouchListener(){ public boolean onTouch(View v, MotionEvent me){ return mDetector.onTouchEvent(me); } }); 

    Wenig spät, aber meine Lösung dieses Problems ist:

     @Override public boolean onTouchEvent(MotionEvent event) { this.mDetector.onTouchEvent(event); return super.onTouchEvent(event); } 

    Die Rückkehr des Detektors ist verloren gegangen. Ändern:

     @Override public boolean onTouchEvent(MotionEvent event) { if (this.mDetector != null) return this.mDetector.onTouchEvent(event); return super.onTouchEvent(event); } 

    Aber ist das eine gute Lösung? Zeit für Android Insider. 😉

    Tschau Fred

    Ich habe deine erste Zeile bearbeitet:

     public class MainActivity extends Activity implements OnGestureListener, OnDoubleTapListener { 

    Ich habe deinen Code benutzt, aber ich habe die vollständigen Schnittstellennamen so geliefert:

     public class MainActivity extends Activity implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener { 

    Das hat nach den Änderungen gearbeitet. Hoffe das hilft.

    Hier ist einfach Android-Code für Gesten Richtung Erkennung :

    MainActivity.java

     import java.util.ArrayList; import android.app.Activity; import android.gesture.Gesture; import android.gesture.GestureLibraries; import android.gesture.GestureLibrary; import android.gesture.GestureOverlayView; import android.gesture.GestureOverlayView.OnGesturePerformedListener; import android.gesture.GestureStroke; import android.gesture.Prediction; import android.os.Bundle; import android.widget.Toast; public class MainActivity extends Activity implements OnGesturePerformedListener { GestureOverlayView gesture; GestureLibrary lib; ArrayList<Prediction> prediction; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lib = GestureLibraries.fromRawResource(MainActivity.this, R.id.gestureOverlayView1); gesture = (GestureOverlayView) findViewById(R.id.gestureOverlayView1); gesture.addOnGesturePerformedListener(this); } @Override public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { // TODO Auto-generated method stub ArrayList<GestureStroke> strokeList = gesture.getStrokes(); // prediction = lib.recognize(gesture); float f[] = strokeList.get(0).points; String str = ""; if (f[0] < f[f.length - 2]) { str = "Right gesture"; } else if (f[0] > f[f.length - 2]) { str = "Left gesture"; } else { str = "no direction"; } Toast.makeText(getApplicationContext(), str, Toast.LENGTH_LONG).show(); } } 

    Activity_main.xml

     <android.gesture.GestureOverlayView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:android1="http://schemas.android.com/apk/res/android" xmlns:android2="http://schemas.android.com/apk/res/android" android:id="@+id/gestureOverlayView1" android:layout_width="match_parent" android:layout_height="match_parent" android1:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Draw gesture" android:textAppearance="?android:attr/textAppearanceMedium" /> </android.gesture.GestureOverlayView> 
    Das Android ist ein Google Android Fan-Website, Alles über Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.