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上移动(不松开),还是那种带惯性的手指快速划,都不应该产生滑动效果啊。
    所以想不太明白。。。。

    评论

报告相同问题?

悬赏问题

  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable