解決ViewPager在ScrollView中橫滑不靈敏的問題可以通過自定義ScollView的方式實現(xiàn),這里有兩種方法,但是個人認為第二種比第一種要好一些,因為第一種當你在ViewPager中垂直滑動很大的距離時,ScrollView不能滾動
第一種:
本方法同樣適用于ScrollView中ListView等其他View無法滾動。
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) {
/**
* if we're scrolling more closer to x direction, return false, let subview to process it
*/
return (Math.abs(distanceY) > Math.abs(distanceX));
}
}
}
第二種:
public class ScrollViewExtend extends ScrollView {
// 滑動距離及坐標
private float xDistance, yDistance, xLast, yLast;
public ScrollViewExtend(Context context, AttributeSet attrs) {
super(context, attrs);
}
@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);
}
}
錯誤不足之處或相關(guān)建議歡迎大家評論指出,謝謝!如果覺得內(nèi)容可以的話麻煩喜歡(?)一下