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 }
  • 相关阅读:

    Qt5开发实战学习——遇到的知识
    VS2017+Qt5.9.3,VS无法打开纯Qt工程(pro文件)
    QT的OpenGL
    QT之pro文件
    虚拟机网卡还原默认设置
    qt编译QOCI驱动连接oracle数据库
    关于数据库Oracle的创建、连接和Qt的小结
    联想G50-70恢复出厂设置
    移植解决方案到中标麒麟(一)——遇到的一些问题
  • 原文地址:https://www.cnblogs.com/kangweifeng/p/5310442.html
Copyright © 2011-2022 走看看