Android中scrollview和viewpage滑动冲突解决

欢迎加入技术谈论群:714476794


在scrollview 嵌套viewpage的时候 左右滑动viewpage的时候就会觉得不流畅 解决办法只需要重写scrollview即可

下面贴代码

package com.kincai.store.view.custom;

import android.content.Context;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ScrollView;

/**
 * @author kincai
 * 
 * @todo 自定义scrollview 解决scrollview和viewpage 手势滑动监听
 * 
 * @package com.kincai.store.view.custom
 * 
 * @time 2015-6-22 下午4:49:52
 * 
 */
public class ProScrollview extends ScrollView {

	private GestureDetector mGestureDetector;
	View.OnTouchListener mGestureListener;

	public ProScrollview(Context context) {
		this(context, null);
	}

	public ProScrollview(Context context, AttributeSet attrs) {
		this(context, attrs, 0);
	}

	public ProScrollview(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		mGestureDetector = new GestureDetector(context, new YScrollDetector());
	}

	/**
	 * 触发拦截触摸事件
	 * 一但返回True(代表事件在当前的viewGroup中会被处理),则向下传递之路被截断(所有子控件将没有机会参与Touch事件),
	 * 同时把事件传递给当前的控件的onTouchEvent()处理;返回false,则把事件交给子控件的onInterceptTouchEvent()
	 * 
	 * 
	 * onInterceptTouchEvent方法是关键,重写这个方法使如果ScrollView有touch事件时不被拦截,
	 * 这样只要ScrollView有touch事件优先处理,这样就保证了滑动的流畅。
	 */
	@Override
	public boolean onInterceptTouchEvent(MotionEvent ev) {
		return super.onInterceptTouchEvent(ev)
				&& mGestureDetector.onTouchEvent(ev);
	}

	class YScrollDetector extends SimpleOnGestureListener {
		@Override
		public boolean onScroll(MotionEvent e1, MotionEvent e2,
				float distanceX, float distanceY) {
			if (Math.abs(distanceY) > Math.abs(distanceX)) {
				return true;
			}
			return false;
		}
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值