当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《确定多个视图中的哪个VIEW有手势(双击,向左滑动,向右滑动等)?》经验,为你挑选了1个好方法。

我有一个水平多个relativelayout视图的滚动视图...一个数据库中的每个记录...一个以编程方式创建.

我需要确定哪些视图受某些手势影响...单击,双击和左/右滑动.

当然点击我能够得到:

     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()

根据MYLOG,我正在根据需要采取适当的姿态.问题是,我不知道如何获取手势所在的视图ID.我知道它是在onTouch但是调用了gestureDetector.OnTouchEvent确定动作......我在这一点上迷失了.

我在StackOverflow和其他网站上搜索了几个小时...他们都显示了如何确定手势的差异......但是无法找到关于使用多个视图的任何内容,我可以使用它.

任何帮助,将不胜感激.



1> Peter..:

我想我明白了.可能不是最优雅的方式,并且由于以这种方式处理它可能存在其他"问题",但是现在它可以工作.但如果其他人发现这个问题,我就是这样解决的:

以下是我修改过的代码的解决方法.我添加了一个名为的公共变量vTouch:

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()

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

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有