完美解决ListView和ViewPager的滑动冲突

public class MyListView extends ListView {

// 滑动距离及坐标

private float xDistance, yDistance, xLast, yLast;

public MyListView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}

public MyListView(Context context, AttributeSet attrs) {

super(context, attrs);

}

public MyListView(Context context) {

super(context);

}

@Override

public boolean onInterceptTouchEvent(MotionEvent ev) {

switch (ev.getAction()) {

case MotionEvent.ACTION_DOWN:

xDistance = yDistance = 0f;

xLast = ev.getX();

yLast = ev.getY();

break;

case MotionEvent.ACTION_MOVE:

final float curX = ev.getX();

final float curY = ev.getY();

xDistance += Math.abs(curX - xLast);

yDistance += Math.abs(curY - yLast);

xLast = curX;

yLast = curY;

if (xDistance > yDistance) {

return false;   //表示向下传递事件

}

}

return super.onInterceptTouchEvent(ev);

}

}

在onInterceptTouchEvent这个方法里拦截。如果在x轴上的距离大于y轴上的距离表示是ViewPager的滑动,所以滑动处理交给ViewPager的OnTouchEvent来处理,ListView不处理。(代码里返回return false)

反之 return  super.onInterceptTouchEvent(ev); 表示交给当前view(也就是ListView的触摸事件处理)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容