关于禁止listview滑动的问题 5C

我的项目里,想要禁止listview滑动,百度了下,网上有人建议用以下方法,即拦截onTouch中的ACTION_MOVE。程序如下:
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
return true;

                default:
                    break;
            }
            return false;
        }      

但我试了下,手在listview上乱滑的时候,listview偶尔还是会滑动。于是自己猜想,可能拦截的不全,所以又把ACTION_UP和ACTION_DOWN也拦截了,程序变为如下:
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
return true;

                default:
                    break;
            }
            return false;
        }

这下,无论手怎么在listview上来回划, listview也不会滑动了。
问题是貌似解决了,可是不太明白,为什么只拦截ACTION_MOVE不管用呢?我的理解,ACTION_UP和ACTION_DOWN应该只是对屏幕的按下与松开,怎么还会有滑动效果呢?
请老师指教,多谢!

4个回答

你要屏蔽点击事件吗?如果点击事件也要屏蔽。list上面加一层透明view。。应该就不会滑动了吧。

不懂java哈,但看这个动作里除了这三个,应该还有其他的行为,测试下是不是还会出现问题。我觉得原因在下面的return false,只要你 的onTouch触发了,但不是move就会返回fasle,你加了up和down进去,说明up和down也会触发这个动作。你现在的代码在以下其他动作下是不是也还是会产生滑动

ACTION_DOWN:
ACTION_MOVE:
ACTION_POINTER_DOWN:
ACTION_POINTER_UP:
ACTION_UP:
ACTION_OUTSIDE:
ACTION_SCROLL:
ACTION_CANCEL:

应该是场景考虑不全。

多谢zhangwulin1207 老师,估计是您所说的场景考虑不全的问题,可我的疑问是应该只有ACTION_MOVE才是负责滑动的,他是核心,没有他,就不应该产生滑动。
比如说,我手指慢慢在listview上移动(不松开),listview会产生一个慢速滑动的效果,这时候无疑是ACTION_MOVE在负责对吧。
再比如说,我手指按下(ACTION_DOWN),然后快速移动(ACTION_MOVE),然后再松开(ACTION_UP)。listview会产生一个带惯性的快速滑动的效果,但核心的移动效果的实现还是中间的ACTION_MOVE的那个环节对吧?
也就是说,我如果把ACTION_MOVE给拦截了,那么不管我是手指慢慢在listview上移动(不松开),还是那种带惯性的手指快速划,都不应该产生滑动效果啊。
所以想不太明白。。。。

你拦截的是ListView的ACTION_MOVE吗?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问