GestureOverlayView和Double-Tap

Bas*_*yeh 9 android

因此,我希望能够使用GestureOverlayView和OnGestureListener识别高级手势,并且能够使用GestureDetector检测双击和长按.我在两个不同的项目中分别使用这两个功能.但是,我正在尝试将它们结合起来并遇到一些问题.似乎当我尝试双击/长按时,它不被识别,因为GestureOverlayView覆盖整个屏幕并且只能识别手势生成器中定义的高级手势.有谁知道如何设置GestureOverlayView以便它允许GestureDetector完成它的工作?我的代码:

public class HelloAndroid extends Activity implements OnGesturePerformedListener, OnDoubleTapListener, OnGestureListener {
/** Called when the activity is first created. */
private GestureLibrary mLibrary;
private GestureDetector detector;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures);
    if (!mLibrary.load()) {
        finish();
    }

    GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures);
    gestures.addOnGesturePerformedListener(this);

    detector = new GestureDetector(this, this);\
Run Code Online (Sandbox Code Playgroud)

和xml ......

 <?xml version="1.0" encoding="utf-8"?>

<android.gesture.GestureOverlayView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/gestures"
        android:layout_width="fill_parent" 
        android:visibility="invisible"
        android:layout_height="fill_parent">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <TextView  
        android:id="@+id/text1"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/hello"
        />  
    </LinearLayout>    
</android.gesture.GestureOverlayView>
Run Code Online (Sandbox Code Playgroud)

提前致谢!

fr4*_*gus 3

我做到了,但不确定我的解决方案是否适合您。\n您是否需要在整个活动或列表中检测双击和长按?

\n\n

在我的项目中,我拥有的当然是 GestureOverlayView 包装了所有内容,但我的 GestureDetector 仅分配在我想要处理这些事件的容器上,特别是在带有缩略图的网格上。

\n\n

实际上,我的手势检测器位于 View.OnTouchListener 中

\n\n
public class TouchListener implements View.OnTouchListener {\n\n    Rect rect = new Rect();\n\n    @Override\n    public boolean onTouch(View v, MotionEvent event) {\n        gestureDetector.onTouchEvent(event);\n        // We do not use the return value of\n        // mGestureDetector.onTouchEvent because we will not receive\n        // the "up" event if we return false for the "down" event.\n    // false is returned so children views can receive touch event too.\n        return false;\n}\n\n    private View getViewAt(int x, int y) {\n    // I need to know which thumbnail was selected\n    }\n\n    GestureDetector gestureDetector = new GestureDetector(new SimpleOnGestureListener() {\n        @Override\n        public void onLongPress(MotionEvent e) {\xe2\x80\xa6}\n        @Override\n        public boolean onSingleTapConfirmed(MotionEvent e) {\xe2\x80\xa6}\n        @Override\n        public boolean onDoubleTap(MotionEvent e) {...}\n\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

}

\n\n

然后我只需要把这个触摸监听器分配给我的网格。根据您的情况,它可能会在您的列表中使用。

\n\n
mGrid.setOnTouchListener(new TouchListener());\n
Run Code Online (Sandbox Code Playgroud)\n\n

发生的情况是,当未检测到手势时,GesturOverlayView 会将触摸事件传播到内部视图。解决方案是在视图上创建一个触摸监听器,您需要在监听器 onTouch 方法上使用 GestureDetector 来检测简单的手势。希望它可以帮助你。

\n