Sie müssen eine Unterklasse bilden ViewPager. onTouchEventEs enthält viele gute Dinge, die Sie nicht ändern möchten, z. B. das Zulassen, dass untergeordnete Ansichten berührt werden. onInterceptTouchEventist das, was du ändern willst. Wenn Sie sich den Code für ansehen ViewPager, sehen Sie den Kommentar:
/*
* This method JUST determines whether we want to intercept the motion.
* If we return true, onMotionEvent will be called and we do the actual
* scrolling there.
*/
Hier ist eine Komplettlösung:
Fügen Sie diese Klasse zunächst Ihrem srcOrdner hinzu:
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.animation.DecelerateInterpolator;
import android.widget.Scroller;
import java.lang.reflect.Field;
public class NonSwipeableViewPager extends ViewPager {
public NonSwipeableViewPager(Context context) {
super(context);
setMyScroller();
}
public NonSwipeableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
setMyScroller();
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
//down one is added for smooth scrolling
private void setMyScroller() {
try {
Class<?> viewpager = ViewPager.class;
Field scroller = viewpager.getDeclaredField("mScroller");
scroller.setAccessible(true);
scroller.set(this, new MyScroller(getContext()));
} catch (Exception e) {
e.printStackTrace();
}
}
public class MyScroller extends Scroller {
public MyScroller(Context context) {
super(context, new DecelerateInterpolator());
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, 350 /*1 secs*/);
}
}
}
Stellen ViewPagerSie als Nächstes sicher, dass Sie diese Klasse anstelle der regulären Klasse verwenden , die Sie wahrscheinlich als angegeben haben android.support.v4.view.ViewPager. In Ihrer Layoutdatei möchten Sie Folgendes angeben:
<com.yourcompany.NonSwipeableViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
Dieses spezielle Beispiel befindet sich in a LinearLayoutund soll den gesamten Bildschirm einnehmen, weshalb layout_weight1 und layout_height0 dp ist.
Und setMyScroller();Methode ist für einen reibungslosen Übergang