zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    C# 动态创建SQL数据库(一)
    在Winform中菜单动态添加“最近使用文件”
    转(C# 类似右键菜单弹出窗体)
    为什么不能用Abort退出线程
    C# GDI绘制波形图
    转(C# 实现生产者消费者队列)
    为字段设置初始值
    闲话资源管理
    正确使用 new 修饰符
    减少装箱与拆箱
  • 原文地址:https://www.cnblogs.com/kangweifeng/p/5310442.html
Copyright © 2011-2022 走看看