3

私は v4 ViewPager を使用しており、以下のリンクに従って、補間器を使用してスクロール速度とスクロール アニメーションを設定できます。

Android での Viewpager コントローラーの速度の低下

このようなコンストラクターで尋ねられたとき、私は線形補間器を使用していました

  private void setScroller() {
     try {
        Field mScroller;
        mScroller = ViewPager.class.getDeclaredField("mScroller");
        mScroller.setAccessible(true); 
        FixedSpeedScroller scroller = 
           new FixedSpeedScroller(this.getContext(), new LinearInterpolator());
        mScroller.set(this, scroller);
     } catch (NoSuchFieldException e) {
     } catch (IllegalArgumentException e) {
     } catch (IllegalAccessException e) {
     }
  }

今、私のビューページには多くのビューのページがあります。その下に、ドットで構成される pagerindicator を追加しました。

  O O O O O O O 

ドットを押すと、現在のページが SmoothScrolling で設定されます。タッチ イベントを使用して、表示する必要がある適切なページ番号を取得できます。これを知った後、このメソッドを呼び出してスムーズにスクロールします。

  public void snapToPage(int whichPage) {
     int numperOfSwapsRequired = whichPage - getCurrentPageIndex();
     mScrollingDuration *= numperOfSwapsRequired; 

     if(numperOfSwapsRequired == 0) return;
     if(numperOfSwapsRequired > 0) {
        for(int i = 0; i<numperOfSwapsRequired; i++){
           setCurrentItem(getCurrentItem()+1, true);
        }
     } else {
        for(int i = 0; i>numperOfSwapsRequired; i--){
           setCurrentItem(getCurrentItem()-1, true);  
        }
     }
     mScrollingDuration = 300;
  } 

今、すべてがうまくいきます。ただし、選択したページのドットに近いドットを選択した場合のみ。リニアアニメーションでちゃんとスクロールします。

しかし、選択したページのドットに残っているドットを選択すると。スクロールしないでください。スクロールアニメーションなしでページに直接ジャンプするだけです。

だから私はこれを修正する方法が混乱しています。これはインターポレーターまたはスクローラーに関連していますか。

どんな助けでも大歓迎です。

ありがとう

4

1 に答える 1

0

ああ...それは常に愚かなが小さな間違いになるようになります。しかし、私はそれを捕まえたことに感謝します。私はScrollerのGoogleコードファイルを読み始めていました:)

mScrollingDuration *= numperOfSwapsRequired; 

この数値は、右から左にスクロールすると負になり、アニメーション時間がゼロになります。

これで解決しました

mScrollingDuration *= Math.abs(numperOfSwapsRequired);
于 2012-11-03T10:17:52.190 に答える