怎么解决Android listview 单个item的左右滑动和整个listview上下滑动的冲突问题?
答案:2 悬赏:50 手机版
解决时间 2021-11-21 14:30
- 提问者网友:风月客
- 2021-11-21 04:06
怎么解决Android listview 单个item的左右滑动和整个listview上下滑动的冲突问题?
最佳答案
- 五星知识达人网友:往事隔山水
- 2021-11-21 05:08
你是listView把滑动事件截取了,然后item就不能响应滑动了吗?这样可以重写listView,重写onInterceptTouchEvent()
全部回答
- 1楼网友:傲气稳了全场
- 2021-11-21 06:00
单个item的左右滑动和整个listview上下滑动的冲突关键在于识别用户的动作是要滑动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来实现。
目前可以勉强应付的方法是根据用户的移动坐标来识别其意图:
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来实现。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯