614 Stimmen

Wie deaktivieren Sie Paging durch Streichen mit dem Finger in ViewPager aber immer noch in der Lage sein, programmgesteuert zu streichen?

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?

59voto

Pietro Punkte 591

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.

39voto

Grease Punkte 1288

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:

Keyboard buttons

33voto

KAMAL VERMA Punkte 675

So deaktivieren Sie das Streichen

mViewPager.beginFakeDrag();

So aktivieren Sie das Streichen

mViewPager.endFakeDrag();

16voto

Oded Breiner Punkte 26754

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);
            }
        }

14voto

Tayyab Mazhar Punkte 1172

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.

Dank an: https://stackoverflow.com/a/61685871/9026710

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X