Android listview的滑动冲突解决方法

Android listview的滑动冲突解决方法,第1张

概述Androidlistview的滑动冲突解决方法在Android开发的过程中,有时候会遇到子控件和父控件都要滑动的情况,尤其是当子控件为listview的时候。就比如在一个ScrollView里有一个listview,这种情况较常见,就会出现这种滑

AndroID ListvIEw的滑动冲突解决方法

在AndroID开发的过程中,有时候会遇到子控件和父控件都要滑动的情况,尤其是当子控件为ListvIEw的时候。就比如在一个ScrollVIEw里有一个ListvIEw,这种情况较常见,就会出现这种滑动冲突的情况。这种情况也比较常见,有时候就是这样,没法,但是,了解事件分发的我们知道应该怎么处理这样的事情

有两点需要注意:

一般来说,vIEw的ontouchEvent返回true,即消耗点击事件,vIEwgroup的onIntercepttouchEvent返回false,即不拦截点击事件,这一点从androID源码中可以看出来。但是ListvIEw的父类AbsListVIEw重写了onIntercepttouchEvent,返回了true,注意这里不是一定返回true,但是我觉得这一点可以先忽略。

ontouchEvent和onIntercepttouchEvent的调用顺序。点击事件从父控件向子控件传递,如果父控件不拦截,则交由子控件拦截,如果父控件拦截了,则交由父控件的ontouchEvent处理,如果最终处理点击事件的控件的ontouchEvent返回了false,则将会直接调用其父控件的ontouchEvent,如此向上类推

其实解决方法也很简单:重写父控件的onIntercepttouchEvent函数,在move的时候根据需要返回true,比如左右滑动返回true,其他情况均返回false。这样,当左右滑动的时候,由于onIntercepttouchEvent返回了true,父控件就能处理,其他情况,事件将传递到ListvIEw中,ListvIEw自身可以处理上下滑动。

@OverrIDe public boolean onIntercepttouchEvent(MotionEvent ev)  {   Log.d(TAG,"onIntercepttouchEvent-slop:"+mtouchSlop);    final int action = ev.getAction();   if ((action == MotionEvent.ACTION_MOVE) && (mtouchState != touch_STATE_REST))   {     return true;   }    final float x = ev.getX();   final float y = ev.getY();    switch (action)   {   case MotionEvent.ACTION_MOVE:     final int xDiff = (int)Math.abs(mLastMotionX-x);     if (xDiff>mtouchSlop)     {       mtouchState = touch_STATE_SCRolliNG;     }     break;    case MotionEvent.ACTION_DOWN:     mLastMotionX = x;     mLastMotionY = y;     mtouchState = mScroller.isFinished()? touch_STATE_REST : touch_STATE_SCRolliNG;     break;    case MotionEvent.ACTION_CANCEL:   case MotionEvent.ACTION_UP:     mtouchState = touch_STATE_REST;     break;   }    return mtouchState != touch_STATE_REST; } 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

总结

以上是内存溢出为你收集整理的Android listview的滑动冲突解决方法全部内容,希望文章能够帮你解决Android listview的滑动冲突解决方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1146917.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存