确定多个视图中哪个VIEW有手势(双击、向左滑动、向右滑动等)?

Determine which VIEW in multiple views has gesture (double click, swipe left, swipe right, etc)?

我有一个滚动视图,其中有多个水平相对布局视图...一个数据库中的每条记录...以编程方式创建。

我需要确定哪个视图受某些手势影响...单击、双击和 left/right 滑动。

当然,我能够获得的点击:

     RelativeLayout rlView = new RelativeLayout(this);
     rlView.setId(10000+myrecordid);
     rlView.setOnClickListener(myviewclick);

和 myviewclick:

private View.OnClickListener myviewclick = new View.OnClickListener() {
    public void onClick(View v) {
        Integer i=v.getId()-10000;
        // Do some processing on this view
    }
};

根据我在网上找到的,我尝试这样得到手势:

rlView.setOnTouchListener(myviewtouch);

使用此代码:

private View.OnTouchListener myviewtouch = new View.OnTouchListener(){
    public boolean onTouch(View v, MotionEvent event) {
        return gestureDetector.onTouchEvent(event);
    }

    GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
        @Override
        public boolean onDoubleTap(MotionEvent e) {
            Log.i("MYLOG","double tap");
            return true;
        }
        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) {
            Log.i("MYLOG","SingleTapConfirmed");
            return true;
        }
        @Override
        public void onLongPress(MotionEvent e) {
            Log.i("MYLOG","LongPress");
        }

        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            if (e1.getX()<e2.getX())
                Log.i("MYLOG","Fling Right");
            else
                Log.i("MYLOG","Fling Left");
            return true;
        }
    });
};

根据我的日志,我正在根据需要获得适当的手势。问题是,我不知道如何获取手势所在的视图 ID。我知道它在 onTouch 中,但调用 gestureDetector.OnTouchEvent 来确定动作......我我迷路了。

我在 Whosebug 和其他网站上搜索了几个小时……它们都显示了如何确定手势的差异……但是我找不到任何关于使用我可以使用的多个视图的信息。

如有任何帮助,我们将不胜感激。

我想我明白了。可能不是最优雅的方式,并且可能还有其他 "issues" 因为以这种方式处理它,但现在它可以工作。但是如果其他人发现了这个问题,我是这样解决的:

这是我修改后的代码的运行方式。我添加了一个名为 vTouch:

的 public 变量
private View.OnTouchListener myviewtouch = new View.OnTouchListener(){
    public View vTouch;
    public boolean onTouch(View v, MotionEvent event) {
        vTouch=v;
        return gestureDetector.onTouchEvent(event);
    }

    GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
        @Override
        public boolean onDoubleTap(MotionEvent e) {
            Integer viewId=vTouch.getId();
            Log.i("MYLOG","double tap in view: "+viewId);
            return true;
        }
        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) {
            Integer viewId=vTouch.getId();
            Log.i("MYLOG","SingleTapConfirmed in view: "+viewId);
            return true;
        }
        @Override
        public void onLongPress(MotionEvent e) {
            Integer viewId=vTouch.getId();
            Log.i("MYLOG","LongPress in view: "+viewId);
        }

        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            Integer viewId=vTouch.getId();
            if (e1.getX()<e2.getX())
                Log.i("MYLOG","Fling Right in view: "+viewId);
            else
                Log.i("MYLOG","Fling Left in view: "+viewId);
            return true;
        }
    });
};

通过使用内部 public 变量 vTouch 我现在可以在每个手势事件中引用视图,其中需要 "view" 手势恰好在其中。