android 可滑动组件互相嵌套时滑动冲突解决方案总结

本文总结了在Android开发中遇到可滑动组件互相嵌套导致的滑动冲突问题的解决方案,包括推荐的外部文章方法和个人曾经采用的低效解决方式,主要涉及ScrollView与ViewPager的交互处理。
摘要由CSDN通过智能技术生成

参考文章:

http://www.jianshu.com/p/87a41b8c0dd0

http://www.jianshu.com/p/8bc0765dffc9


  强烈推荐使用以上两篇文章的方法。

         以下是我个人在项目中的解决方案,比较LOW,现在不建议使用,但可作为一种知识参考。

         本人自己以前都是重写ScrollView,ListView,在onTouch方法中判断触点落在谁身上,然后把时间传给谁。具体代码,以ScrollView嵌套ViewPager为例:


public class MaintainArchScrollView extends ScrollView {

	public MaintainArchScrollView(Context context) {
		super(context);
	}

	public MaintainArchScrollView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	public MaintainArchScrollView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}

	@Override
	public boolean onInterceptTouchEvent(MotionEvent ev) {

		// 判断触摸事件是否落在XListView上,如果是则不让
		// ScrollView滑动,以免影响XListView的滑动
		xLV = (XListView) findViewById(R.id.maintain_archives_lv);
		if (isTouchOnLv(ev)&&xLV.isCanPullDownOnTop()&&xLV.isCanPullUpOnbottom()) {
			return false;
		}
//
		return super.onInterceptTouchEvent(ev);
	}

	private boolean isTouchOnWheelMenu(MotionEvent ev) {
		// 判断触摸事件是否落在WheelMenu上,如果是则不让
		// ScrollView滑动,以免影响WheelMenu的手动滑动
		PieChartView vp = (PieChartView) findViewById(R.id.maintain_archives_wheelMenu);
		if (vp == null)
			return false;

		int w = vp.getHeight();
		int[] xy = new int[2];
		float rawY = ev.getRawY();
		vp.getLocationInWindow(xy);
		return rawY >= xy[1] && rawY <= (xy[1]) + w;
	}

	private XListView xLV;
	
	private boolean isTouchOnLv(MotionEvent ev) {
		if (xLV == null)
			return false;

		int w = xLV.getHeight();
		int[] xy = new int[2];
		float rawY = ev.getRawY();
		xLV.getLocationInWindow(xy);
		return rawY >= xy[1] && rawY <= (xy[1]) + w;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值