因此,我希望能够使用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)
提前致谢!
我做到了,但不确定我的解决方案是否适合您。\n您是否需要在整个活动或列表中检测双击和长按?
\n\n在我的项目中,我拥有的当然是 GestureOverlayView 包装了所有内容,但我的 GestureDetector 仅分配在我想要处理这些事件的容器上,特别是在带有缩略图的网格上。
\n\n实际上,我的手势检测器位于 View.OnTouchListener 中
\n\npublic 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});\nRun Code Online (Sandbox Code Playgroud)\n\n}
\n\n然后我只需要把这个触摸监听器分配给我的网格。根据您的情况,它可能会在您的列表中使用。
\n\nmGrid.setOnTouchListener(new TouchListener());\nRun Code Online (Sandbox Code Playgroud)\n\n发生的情况是,当未检测到手势时,GesturOverlayView 会将触摸事件传播到内部视图。解决方案是在视图上创建一个触摸监听器,您需要在监听器 onTouch 方法上使用 GestureDetector 来检测简单的手势。希望它可以帮助你。
\n| 归档时间: |
|
| 查看次数: |
3409 次 |
| 最近记录: |