zoukankan      html  css  js  c++  java
  • Android 实现ListView不可滚动效果

    希望得到的效果是ListView不能滚动,但是最大的问题在与ListView Item还必有点击事件,如果不需要点击事件那就简单了,直接设置ListView.setEnable(false);

        如果还需要点击事件,滚动与点击都是在ListView Touch处理机制管理。

        ListView点击事件是复用ViewGroup的处理逻辑,当用户点击视图并且按下与抬起手指之间移动距离很小,满足点击事件的时间长度限制,就会触发点击事件。

        ListView滚动事件是自己处理,有两个判断条件,当用户触发move事件并且滑动超过touch slop距离 或者 滑动速度超过阀值都会判定为滚动事件。

     1 import android.content.Context;
     2 import android.util.AttributeSet;
     3 import android.view.MotionEvent;
     4 import android.widget.ListView;
     5 
     6 public class ScrollDisabledListView extends ListView {
     7  
     8     private int mPosition;
     9  
    10     public ScrollDisabledListView(Context context) {
    11         super(context);
    12     }
    13  
    14     public ScrollDisabledListView(Context context, AttributeSet attrs) {
    15         super(context, attrs);
    16     }
    17  
    18     public ScrollDisabledListView(Context context, AttributeSet attrs, int defStyle) {
    19         super(context, attrs, defStyle);
    20     }
    21  
    22     @Override
    23     public boolean dispatchTouchEvent(MotionEvent ev) {
    24         final int actionMasked = ev.getActionMasked() & MotionEvent.ACTION_MASK;
    25  
    26         if (actionMasked == MotionEvent.ACTION_DOWN) {
    27             // 记录手指按下时的位置
    28             mPosition = pointToPosition((int) ev.getX(), (int) ev.getY());
    29             return super.dispatchTouchEvent(ev);
    30         }
    31  
    32         if (actionMasked == MotionEvent.ACTION_MOVE) {
    33             // 最关键的地方,忽略MOVE 事件
    34             // ListView onTouch获取不到MOVE事件所以不会发生滚动处理
    35             return true;
    36         }
    37  
    38         // 手指抬起时
    39         if (actionMasked == MotionEvent.ACTION_UP
    40                 || actionMasked == MotionEvent.ACTION_CANCEL) {
    41             // 手指按下与抬起都在同一个视图内,交给父控件处理,这是一个点击事件
    42             if (pointToPosition((int) ev.getX(), (int) ev.getY()) == mPosition) {
    43                 super.dispatchTouchEvent(ev);
    44             } else {
    45                 // 如果手指已经移出按下时的Item,说明是滚动行为,清理Item pressed状态
    46                 setPressed(false);
    47                 invalidate();
    48                 return true;
    49             }
    50         }
    51  
    52         return super.dispatchTouchEvent(ev);
    53     }
    54 }

    (转自:http://blog.csdn.net/androiddevelop/article/details/38815493)

  • 相关阅读:
    Lazy Load, 延迟加载图片的 jQuery 插件(转)
    获取python的版本&获取两个日期的天数差值
    基于appnium+python+夜神模拟器的自动化
    Appium安装部署
    HttpRunner_参数化进阶
    httprunner2.0 概述及使用说明
    httprunner官方文档
    Linux中常用的监控性能的命令(sar、mpstat,vmstat, iostat,)详解
    Linux常用命令大全
    JMeter 事务控制器
  • 原文地址:https://www.cnblogs.com/jenson138/p/4328929.html
Copyright © 2011-2022 走看看