zoukankan      html  css  js  c++  java
  • RecyclerView onTouch & onClick 触摸事件与点击事件

    遇到一种情况需要处理,RecyclerView所在Activity需要处理滑动事件用于返回(onBackPressed)。

    手势检测:

     1  @Override
     2     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
     3                            float velocityY) {
     4         LogUtil.d(this,"fling");
     5         if (e1.getX() - e2.getX() > verticalMinDistance
     6                 && Math.abs(velocityX) > minVelocity) {
     7             LogUtil.d(this, "fling left");
     8             return true;
     9         } else if (e2.getX() - e1.getX() > verticalMinDistance
    10                 && Math.abs(velocityX) > minVelocity) {
    11             LogUtil.d(this, "fling right");
    12             activity.onBackPressed();
    13             return true;
    14         }
    15         return false;
    16     }
    17 
    18     @Override
    19     public boolean onDown(MotionEvent e) {
    20         LogUtil.d(this, "Down");
    21         return false;
    22     }
    23 
    24     @Override
    25     public boolean onScroll(MotionEvent e1, MotionEvent e2,
    26                             float distanceX, float distanceY) {
    27         LogUtil.d(this, "scroll");
    28         return false;
    29     }

    此处需要注意,onDown不能直接处理成true(开始就坑在这里,完全按普通触摸事件处理成返回true,导致click事件永远不会得到事件触发)

    虽然官方文档建议处理触摸事件时,要将其置成true,表示开始处理触摸。但因为我们还有itemView的click事件要处理,所以onDown不能直接返回true.

    绑定触摸事件:

     1  view.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
     2             @Override
     3             public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
     4                 LogUtil.d("Base RecyclerView Event", "Touch");
     5                 mDetector.onTouchEvent(e);
     6                 return false;
     7             }
     8 
     9             @Override
    10             public void onTouchEvent(RecyclerView rv, MotionEvent e) {
    11 
    12             }
    13 
    14             @Override
    15             public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
    16 
    17             }
    18         });



  • 相关阅读:
    说下vue工程中代理配置proxy
    说一下登陆页面的实现逻辑
    $router和router区别
    iframe中涉及父子页面跨域问题
    浅析闭包
    用户注册之短信验证
    vue.js(三)
    vue.js(二)
    vue.js(一)
    批量更改会员权限
  • 原文地址:https://www.cnblogs.com/dev2007/p/5173183.html
Copyright © 2011-2022 走看看