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

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

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

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

 import android.content.Context;
 import android.util.AttributeSet;
 import android.view.MotionEvent;
 import android.widget.ListView;

 public class ScrollDisabledListView extends ListView {

     private int mPosition;

     public ScrollDisabledListView(Context context) {
         super(context);
     }

     public ScrollDisabledListView(Context context, AttributeSet attrs) {
         super(context, attrs);
     }

     public ScrollDisabledListView(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
     }

     @Override
     public boolean dispatchTouchEvent(MotionEvent ev) {
         final int actionMasked = ev.getActionMasked() & MotionEvent.ACTION_MASK;

         if (actionMasked == MotionEvent.ACTION_DOWN) {
             // 记录手指按下时的位置
             mPosition = pointToPosition((int) ev.getX(), (int) ev.getY());
             return super.dispatchTouchEvent(ev);
         }

         if (actionMasked == MotionEvent.ACTION_MOVE) {
             // 最关键的地方,忽略MOVE 事件
             // ListView onTouch获取不到MOVE事件所以不会发生滚动处理
             return true;
         }

         // 手指抬起时
         if (actionMasked == MotionEvent.ACTION_UP
                 || actionMasked == MotionEvent.ACTION_CANCEL) {
             // 手指按下与抬起都在同一个视图内,交给父控件处理,这是一个点击事件
             if (pointToPosition((int) ev.getX(), (int) ev.getY()) == mPosition) {
                 super.dispatchTouchEvent(ev);
             } else {
                 // 如果手指已经移出按下时的Item,说明是滚动行为,清理Item pressed状态
                 setPressed(false);
                 invalidate();
                 return true;
             }
         }

         return super.dispatchTouchEvent(ev);
     }
 }

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

Android 实现ListView不可滚动效果的更多相关文章

  1. Android 设置ListView不可滚动 及在ScrollView中不可滚动的设置

    http://m.blog.csdn.net/blog/yusewuhen/43706169 转载请注明出处: http://blog.csdn.net/androiddevelop/article/ ...

  2. Android 纵向跑马灯滚动效果

    像淘宝和京东都会有跑马灯的效果,今天给大家贡献下以前项目的一个demo,各位看官,且看效果图. 我们先定义一个Bean文件,这个实体类文件主要包含标题,内容描述,以及还有跳转的链接. LampBean ...

  3. Android项目---listview的那些属性,常用却不常见

    一.在xml中,常用到的属性有 android:cacheColorHint="#00000000" //设置拖动背景色为透明 android:dividerHeight=&quo ...

  4. Android中Listview实现分页加载效果OnScrollListener

    activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android& ...

  5. android中listview的item滑动删除效果(已解决listview点击问题)

    领导看到iphone上tableview有个滑动删除的效果,要求在android上也实现,搜了下资料,实现起来比较简单,可弄到后面,居然不能点击了,把一篇文章中的代码修改了一下,捣鼓了一番,搞定,下面 ...

  6. Android 原生listview item伸展收缩效果 (续)

    接上一个原生的listview item的伸展收缩效果. 上一个可能做的有些粗糙,效果也没有这个好,上代码. package com.example.listviewdemo; import java ...

  7. Android 原生listview item伸展收缩效果

    Android原生listview做的一个item的伸缩效果.*永远不要让你老大有机会改需求 package com.example.yunkanglast; import java.io.Seria ...

  8. android自定义listview实现header悬浮框效果

    之前在使用iOS时,看到过一种分组的View,每一组都有一个Header,在上下滑动的时候,会有一个悬浮的Header,这种体验觉得很不错,请看下图: 上图中标红的1,2,3,4四张图中,当向上滑动时 ...

  9. ★android开发--ListView+Json+异步网络图片加载+滚动翻页的例子(图片能缓存,图片不错乱)

    例子中用于解析Json的Gson请自己Google下载 主Activity: package COM.Example.Main; import java.util.HashMap; import ja ...

随机推荐

  1. Tomcat中JVM内存溢出及合理配置

    Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机.Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识 ...

  2. tcp三次握手与四次挥手

  3. Linux之图形化shell------dialog

    转自:Linux dialog详解(图形化shell) | 运维生存时间 对话 UNIX: 使用 shell 脚本创建好的图形应用程序---http://www.ibm.com/developerwo ...

  4. zabbix 服务端

    首先安装zabbix监控平台,必须是在lamp平台下才可以正常使用的 这个是用yum源安装的lamp 步骤一:更新yum源  1.执行以下命令更新yum源为Webtatic EL6 YUM源:  rp ...

  5. javascript 设计模式之观察者模式

    观察者模式又叫发布——订阅模式,顾名思义pub——sub就是被动触发的,:不要给我......,我会给你.......就是一个发布订阅的解释,实质就是对程序中的某个对象状态进行监听观察,并且在该对象发 ...

  6. asp.net的code-Behind技术

    新建一个VS.NET下的项目..看到ASPX,RESX和CS三个后缀的文件了吗??这个就是代码分离.实现了HTML代码和服务器代码分离.方便代码编写和整理. code-Behind:asp.net中的 ...

  7. EBS R12.2安装,使用的操作系统用户

    在安装时,错误使用了oracle rdbms的对应的操作系统用户,导致安装前,验证时"web server install prerequisites"选项验证失败: (本图其它两 ...

  8. 在centos6.5-64bit上安装wxHexEditor,以查看编译二进制文件

    目前在做一个存储,磁盘里面的数据老是出现很诡异的地方,某个通道的录像播放到一半的时候,切换到另外一个通道的视频上去了,一直不知道怎么下手,想着用十六进制编辑器查看磁盘数据. sudo yum inst ...

  9. matlab演奏《卡农》

    % Cripple Pachebel’s Canon on Matlab% Have fun fs = 44100; % sample ratedt = 1/fs; T16 = 0.125; t16 ...

  10. ListView单击单元格 产生其他控件

    以combobox为例. 假如一行里面只有一个combobox. //在类中声明一个控件数组 private ComboBox[] cmds = null; //initview中调用dao组件获得显 ...