描述:
touch滑动事件:翻阅图片
click点击事件:toast出图片名现在的情况是:
1.滑动的时候不仅翻阅了图片,还toast出了图片名(同时相应了touch和click事件),不正常
2.点击的时候(toast出图片名),正常问题
针对情况1,怎么在touch滑动的时候不响应点击事件?希望一起讨论下

解决方案 »

  1.   

    LS的改成onLongClick 照样还是会有问题的  不是很好的解决方案啊   我对此也是比较困惑  也没有找到很好的方法   希望有大牛 帮忙解决分析下~
      

  2.   

    这么做试试,将touch事件响应的时候,down返回false,up返回true,依旧是使用longClick
      

  3.   


    down是这个吗?
    public boolean onDown(MotionEvent e) {
    // TODO Auto-generated method stub
    return false;
    }up好像没有onUp函数
      

  4.   


    @Override
        public boolean onTouchEvent(MotionEvent event) {
         gestureDetector.onTouchEvent(event);
           switch (event.getAction()) {
           case MotionEvent.ACTION_DOWN:{
            return false;}
           case MotionEvent.ACTION_MOVE:{
           }
           case MotionEvent.ACTION_UP:{
           return true;}
           default:
            break;
           }
         return super.onTouchEvent(event);
        }这样写问题还是一样的出现了。
      

  5.   


    如果需要oncick,不能用longclick,有没有备选的解决方案?
      

  6.   

    3楼应该是正解  你去百度搜一下 viewgroup 点击事件分发 看一下 差不多就了解了
      

  7.   


    谢谢,我认真阅读了下
    比如这样的嵌套关系
    1个java,
    1个布局文件:
    ViewGroup(2个全屏LinearLayout(都有一个可toast按钮))
    我只想让LinearLayout响应touch手势。
    ---------
    Activity将TouchEvent传递给最顶层的View(是不是按钮?)
    当按钮不消费这个touch事件的时候,是怎么被轮到判断linearLayout的?(代码是循环执行的吗?)
      

  8.   

    代码只能写一种您看我描述的是否正确
    ->touch事件先传递到按钮
    diapatchTouchEvent(return false)->onInterceptTouchEvent(return false)
    ->touch事件传到linearLayout
    diapatchTouchEvent(return true)->onTouchEvent(return true)这样就是linearLayout来响应
    写代码的时候diapatchTouchEvent和onInterceptTouchEvent是唯一函数,但是这里既要先return false,再return true 不知道如何处理这样的情况
      

  9.   

    http://www.cnblogs.com/kingcent/archive/2011/03/08/1977064.html
    http://blog.csdn.net/shen332401890/article/details/8572732主要看上面 那个  下面那个是我不成熟的记录学习,稍微看看就行。
      

  10.   

    3Q这个机制我在你的第一个回复中已经认真阅读了
    又看了下你的文章,写得很详细有点困惑在于dispatchTouchEvent是不需要重写的吗?
    另外是不是有几个子view就有多少个onInterceptTouchEvent呢?如果不是这样,怎么一个设置false,另一个设置true呢?
      

  11.   

    滑动事件重写onFling,不用onTouch
    点击重写onClick
      

  12.   

    并且加一个全局变量比如boolean isFling;
    在onFling方法中isFling=true;
    在onClick方法中先判断isFling=false,然后执行click事件,记得在onClick方法中最后设置isFling=false
      

  13.   

    楼主,我觉得可以这么做,只用一个onTouch,不要onClick
    @Override
    public boolean onTouch(View v, MotionEvent event) {
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:{
    //记录按下的点的X坐标
    startX = event.getRawX();
    break;
    }
    case MotionEvent.ACTION_UP:
    //记录抬起的点的X坐标, 若两次相等,触发了点击事件,否则是滑动事件
    float LastX = event.getRawX();
    if(startX == LastX){
    Toast.makeText(getApplication(), "点击了", Toast.LENGTH_SHORT).show();
    }else{
    Toast.makeText(getApplication(), "滑动了", Toast.LENGTH_SHORT).show();
    }

    break;
    case MotionEvent.ACTION_MOVE:{
    break;
    } }
    return false;
    }
      

  14.   

    和16楼想法一致,
    在down事件中记录点下的x,y坐标,
    在up事件中记录弹起的x,y坐标,
    UP事件的x,y坐标减去down事件中的坐标,根据自己的需求设定偏移值的范围,不同的范围内执行不同的翻页还是toast!
      

  15.   


    貌似很多时候点击都有可能是move过
      

  16.   


    貌似很多时候点击都有可能是move过你可以看看18楼的做法,