转至:http://www.lbhao.com/forum.php?mod=viewthread&tid=2191
完美解决ScrollView嵌套ViewPager滑动失效和无法正常滑动冲突问题
完美解决方案如下,转载请注明出处:蓝冰论坛
解决方案如下:
第一步:建立一个类叫:VerticalScrollView.java,内容如下:
package com.lanbing.shop;
import android.content.Context;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.widget.ScrollView;
public class VerticalScrollView extends ScrollView {
private GestureDetector mGestureDetector;
public VerticalScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
mGestureDetector = new GestureDetector(context, new YScrollDetector());
}
@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) {
//如果我们滚动更接近水平方向,返回false,让子视图来处理它
return (Math.abs(distanceY) > Math.abs(distanceX));
}
}
}
第二步:添加类之后,记得在权限文件里添加:
<activity android:name="com.lanbing.VerticalScrollView"></activity>
第三步:
在xml文件中替换ScrollView为com.weiyg.cn.shop.VerticalScrollView即可
解释就是:
触控在接近水平滚动时ScrollView不处理事件而交由其子View(即这里的ViewPager)处理即可,重写ScrollView的onInterceptTouchEvent函数
补充:
假如pulltorefresh中 在diapathtouchevent中写的事件处理,则直接在的action move中判断,横向滑动位移是否大于纵向,要是大于纵向,则将事件交于子View处理