package jp.mixi.compatibility.android.widget; import android.content.Context; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.MotionEvent; import android.widget.ScrollView; /** * This is a {@link android.widget.ScrollView} compatibility that enables containing {@link android.support.v4.view.ViewPager}. * {@link android.support.v4.view.ViewPager} swipe action will not be properly performed on some devices while it is in the scrollable component, so use this to avoid such a problem. */ @SuppressWarnings("unused") // public APIs public class ViewPagerContainableScrollView extends ScrollView { private GestureDetector mGestureDetector; public ViewPagerContainableScrollView(Context context) { this(context, null); } public ViewPagerContainableScrollView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public ViewPagerContainableScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mGestureDetector = new GestureDetector(context, new YScrollDetector()); setFadingEdgeLength(0); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev); } private static class YScrollDetector extends GestureDetector.SimpleOnGestureListener { @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { if(Math.abs(distanceY) > Math.abs(distanceX)) { return true; } return false; } } }