Ich habe ViewPager und darunter habe ich 10 Schaltflächen. Wenn ich auf die Schaltfläche klicke, z.B. #4, geht der Pager sofort zur Seite #4, indem ich mPager.setCurrentItem(3);
. Aber ich möchte das Blättern durch horizontales Wischen mit dem Finger deaktivieren. So wird das Blättern durchgeführt NUR indem Sie auf die Schaltflächen klicken. Wie kann ich also das Streichen mit dem Finger deaktivieren?
Antworten
Zu viele Anzeigen?Besser ist es, sie als stilisierbar zu deklarieren, so dass Sie ihre Eigenschaft von xml aus ändern können:
private boolean swipeable;
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyViewPager);
try {
swipeable = a.getBoolean(R.styleable.MyViewPager_swipeable, true);
} finally {
a.recycle();
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return swipeable ? super.onInterceptTouchEvent(event) : false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return swipeable ? super.onTouchEvent(event) : false;
}
Und in Ihrer values/attr.xml:
<declare-styleable name="MyViewPager">
<attr name="swipeable" format="boolean" />
</declare-styleable>
damit Sie es in Ihrer Layout-XML verwenden können:
<mypackage.MyViewPager
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/viewPager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:swipeable="false" />
Natürlich können Sie auch eine get/set-Eigenschaft haben.
Wenn Sie von ViewPager aus erweitern, müssen Sie auch überschreiben executeKeyEvent
wie bereits von @araks erwähnt
@Override
public boolean executeKeyEvent(KeyEvent event)
{
return isPagingEnabled ? super.executeKeyEvent(event) : false;
}
Denn bei einigen Geräten wie dem Galaxy Tab 4 10' werden diese Tasten angezeigt, während sie bei den meisten anderen Geräten nicht zu sehen sind:
Ich musste das Wischen auf einer bestimmten Seite deaktivieren und mit einer schönen Gummiband-Animation versehen - so geht's:
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
if (position == MANDATORY_PAGE_LOCATION && positionOffset > 0.5) {
mViewPager.setCurrentItem(MANDATORY_PAGE_LOCATION, true);
}
}
Wenn Sie ViewPager2 verwenden, müssen Sie nur die Option:
viewpager.setUserInputEnabled(false);
Desde el docs :
Aktivieren oder deaktivieren Sie das vom Benutzer initiierte Blättern. Dazu gehören Berührungseingaben (Bildlauf- und Wischgesten) und Eingaben über die Tastatur. Die Deaktivierung der Tastatureingabe wird noch nicht unterstützt. Wenn der benutzerinitiierte Bildlauf deaktiviert ist, funktioniert der programmatische Bildlauf über setCurrentItem weiterhin. Standardmäßig ist der benutzerinitiierte Bildlauf aktiviert.