DrawerLayout与ListView滑动冲突

事件:当DrawerLayout的主内容是一个ListView时,滑动ListView经常会拉出菜单

 

解决方法:使用自定义控件替换DrawerLayout即可

 1 import android.content.Context;
 2 import android.support.v4.widget.DrawerLayout;
 3 import android.util.AttributeSet;
 4 import android.view.MotionEvent;
 5 import android.view.ViewConfiguration;
 6 
 7 /**
 8  * Created by kwf on 2016/3/23 0023.
 9  */
10 public class CustomDrawerLayout extends DrawerLayout {
11 
12 
13     public CustomDrawerLayout(Context context) {
14         this(context, null);
15     }
16 
17     public CustomDrawerLayout(Context context, AttributeSet attrs) {
18         this(context, attrs, 0);
19     }
20 
21     public CustomDrawerLayout(Context context, AttributeSet attrs, int defStyle) {
22         super(context, attrs, defStyle);
23         final ViewConfiguration configuration = ViewConfiguration
24                 .get(getContext());
25         mTouchSlop = configuration.getScaledTouchSlop();
26     }
27 
28     private int mTouchSlop;
29     private float mLastMotionX;
30     private float mLastMotionY;
31 
32 
33     @Override
34     public boolean onInterceptTouchEvent(MotionEvent ev) {
35         try {
36             final float x = ev.getX();
37             final float y = ev.getY();
38 
39             switch (ev.getAction()) {
40                 case MotionEvent.ACTION_DOWN:
41                     mLastMotionX = x;
42                     mLastMotionY = y;
43                     break;
44 
45                 case MotionEvent.ACTION_MOVE:
46                     int xDiff = (int) Math.abs(x - mLastMotionX);
47                     int yDiff = (int) Math.abs(y - mLastMotionY);
48                     final int x_yDiff = xDiff * xDiff + yDiff * yDiff;
49 
50                     boolean xMoved = x_yDiff > mTouchSlop * mTouchSlop;
51 
52                     if (xMoved) {
53                         if (xDiff > yDiff * 4) {
54                             return true;
55                         } else {
56                             return false;
57                         }
58                     }
59                     break;
60                 default:
61 
62                     break;
63             }
64             return super.onInterceptTouchEvent(ev);
65         } catch (IllegalArgumentException ex) {
66         }
67         return false;
68     }
69 
70     @Override
71     public boolean onTouchEvent(MotionEvent ev) {
72         try {
73             return super.onTouchEvent(ev);
74         } catch (IllegalArgumentException ex) {
75         }
76         return false;
77     }
78 }

 

转载于:https://www.cnblogs.com/kangweifeng/p/5310442.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值