aaaffaewrerewrwer 2018-06-29 09:17 采纳率: 0%
浏览 1708
已结题

关于禁止listview滑动的问题

我的项目里,想要禁止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应该只是对屏幕的按下与松开,怎么还会有滑动效果呢?
请老师指教,多谢!

  • 写回答

3条回答 默认 最新

  • aaaffaewrerewrwer 2018-06-29 10:06
    关注

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

    评论

报告相同问题?