4

アプリケーションに ViewPager があり、いつでも右側へのスワイプを無効/許可したいと考えています。ビューページャーのすべてのビューには ListView が含まれています。どうやってやるの?私はこの方法でそれをやろうとしています:

private int oldX;
private int deltaX = 0;

@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
    if (motionEvent.getAction() == MotionEvent.ACTION_MOVE || motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
        int newX = (int) motionEvent.getX();
        deltaX = oldX - newX;
        oldX = newX;
    }
    if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
        oldX = 0;
    }
    return deltaX < 0;        
}

しかし、ビューはまだ少し右に傾いています。誰かが同じ問題を解決していましたか?

4

1 に答える 1

12

ViewPager のコードをアプリケーションに取り込んで次のコードを追加することで、ViewPager で片側スクロールを実現できました。

private boolean performDrag(float x) {
    boolean needsInvalidate = false;

    final float deltaX = mLastMotionX - x;
    mLastMotionX = x;

    // MY CODE STARTS
    if (deltaX < 0) {
        return false;
    }
    // MY CODE ENDS

    float oldScrollX = getScrollX();
    ...

それはうまくいくようです。必要な唯一のことは、アダプター コードを使用するか、独自のアダプターを提供することです。ViewPagerこれは、そのコードで使用されている一部のメソッドが から公開されていないためPagerAdapterです。

于 2012-09-05T12:54:50.873 に答える