怎么解决Android listview 单个item的左右滑动和整个listview上下滑动的冲突问题?
2个回答
展开全部
你是listView把滑动事件截取了,然后item就不能响应滑动了吗?这样可以重写listView,重写onInterceptTouchEvent()
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
单个item的左右滑动和整个listview上下滑动的冲突关键在于识别用户的动作是要滑动item还是listview,而知道用户意图后的滑动行为则不会成为冲突(深刻理解这句话)。
目前可以勉强应付的方法是根据用户的移动坐标来识别其意图:
1、记录用户触发移动的开始X,Y坐标;
2、记录用户移动过程中的X,Y坐标;
3、计算横坐标偏移和纵坐标偏移,如果前者较大,则认为是水平移动,也就认为是移动item;否则认为是垂直移动,算是移动listview。
目前可以勉强应付的方法是根据用户的移动坐标来识别其意图:
1、记录用户触发移动的开始X,Y坐标;
2、记录用户移动过程中的X,Y坐标;
3、计算横坐标偏移和纵坐标偏移,如果前者较大,则认为是水平移动,也就认为是移动item;否则认为是垂直移动,算是移动listview。
追问
但是我右滑到一定距离时,我又上下移动,Move时候的,y轴变化了,这样的话后者就比前者大,那么listview就又开始移动了
追答
我们知道,listview定义的是线性数据垂直显示的整体,那么在垂直方向上的移动,任何个体item都要服从于listview整体的。因此,要想脱离listview,让个体item自己在各个方向上自由移动,必须另外想别的方法。
一个可行的思想是利用相对移动,这可能恰恰就是你想要的结果,具体实现思路是:
1、计算item将要移动的最大区域边界,这个计算可以是动态的,但必须要保证在listview渲染孩子之前完成;
2、给移动item向listview申请最大区域的尺寸;
3、让item在给定的最大区域中做任何想要的移动,此时任何的移动都被限制在该区域内,因此不会和listview发生关系。
注意:在给定区域内的相对移动一般通过调整padding来实现。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询