Sie müssen eine Unterklasse bilden ViewPager
. onTouchEvent
Es enthält viele gute Dinge, die Sie nicht ändern möchten, z. B. das Zulassen, dass untergeordnete Ansichten berührt werden. onInterceptTouchEvent
ist 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 src
Ordner 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 ViewPager
Sie 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 LinearLayout
und soll den gesamten Bildschirm einnehmen, weshalb layout_weight
1 und layout_height
0 dp ist.
Und setMyScroller();
Methode ist für einen reibungslosen Übergang