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 }
时间: 2024-08-10 23:25:08

DrawerLayout与ListView滑动冲突的相关文章

ScrollView 嵌套ListView 滑动冲突,与显示不全

import android.content.Context; import android.util.AttributeSet; import android.widget.ListView; /** * * @author jiarh *2014-8-14 */ public class UserListView extends ListView { public UserListView(Context context) { super(context); } public UserLis

ScrollView 与ListView 滑动冲突完美解决

一.介绍ListView高度的设置方法 二.根据实际需求解决冲突问题 一.介绍ListView高度的设置方法 在ScrollView中使用ListView,ListView的高度会不正常. 方式一:在XML中写死  android:layout_width="match_parent" android:layout_height="120dp" 方式二:代码中设置固定高度(如果在运行过程中才能决定ListView高度) public void setHeight(i

NestedScrollView嵌套ListView滑动冲突

时间:2015年12月22日16:12:34 问题描述: 1)  在android.support.v4.widget.NestedScrollView中直接嵌套ListView时出现的情况:listview显示不全只有一行或者两行. 2) 如果listview的item中有根据id选择选项会导致选择错乱,现在(2015年12月22日16:13:55)碰到的问题是:listview中包含有switch控件, 用来对该item是否可用进行判断,但是现在冲突导致的listview中位置错乱. 2.解

安卓解决viewPager和scrollView和listView滑动冲突的问题

大家想想listView的实现方式 就是一个item一个item 添加到一个布局中, 那么LinearLayout可不可以像ListView 那样 往里面添加item  答案是可以的 我们先模拟listView 的LinearLayout类 public class LinearLayoutForListView extends LinearLayout { private ListAdapter adapter; private OnClickListener onClickListener

SwipeRefreshLayout与listview滑动冲突问题

listView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

scrollview 和 listview滑动冲突解决

http://blog.csdn.net/wanghao200906/article/details/51084975 http://www.cnblogs.com/shitianzeng/articles/2467533.html http://blog.csdn.net/zhaokaiqiang1992/article/details/38585547 http://blog.csdn.net/yaosongqwe/article/details/47311617 http://www.ji

Android实践之ScrollView中滑动冲突处理

转载注明出处:http://blog.csdn.net/xiaohanluo/article/details/52130923 1. 前言 在Android开发中,假设是一些简单的布局.都非常easy搞定.可是一旦涉及到复杂的页面,特别是为了兼容小屏手机而使用了ScrollView以后,就会出现非常多点击事件的冲突.最经典的就是ScrollView中嵌套了ListView. 我想大部分刚開始接触Android的同学们都踩到过这个坑,这一篇文章就从近期做的一个项目讲起.然后在过程中提供一些解决冲突

解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题

在一个滑动控件或者是布局里面,添加另外一个可以滑动的控件,通常会造成一些莫名其妙的问题.今天主要介绍在工作中遇到的,在ScrollView布局中嵌套Listview显示不正常,和在Listview中嵌套Listview的滑动冲突的问题. 1.ScrollView布局中嵌套Listview显示不正常的解决方案 目前来说,解决这个问题有好几种解决方案,这里只介绍其中两种比较简单易行的其中两种. (1)自定义一个Listview,继承自Listview,代码如下: public class ListV

(转)ViewPager,ScrollView 嵌套ViewPager滑动冲突解决

ViewPager,ScrollView 嵌套ViewPager滑动冲突解决 本篇主要讲解一下几个问题 粗略地介绍一下View的事件分发机制 解决事件滑动冲突的思路及方法 ScrollView 里面嵌套ViewPager导致的滑动冲突 ViewPager里面嵌套ViewPager 导致的滑动冲突 轮播图的几种实现方式 先看一下效果图 ScrollView里面嵌套ViewPager ViewPager里面嵌套ViewPager View的 事件分发机制 这篇博客大打算详细讲解View的事件分发机制