1

ViewPagerがスクロールしたときにビューを移動したい。ビューページャーで、移動するビューの左マージンを調整するために使用するパラメーターpositionOffsetを使用したスクロールリスナーを見つけました。

動作しますが、スクロールはもうスムーズではありません。スクロールリスナーをコメントアウトすると、再びスムーズになります。私がアニメートしているビューは非常にシンプルです。無地の小さな正方形だけです。requestLayout()呼び出しは、このビューでのみ実行されます。コード:

pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageSelected(int position) {
    }
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        if (positionOffset != 0 || (positionOffset == 0 && position == 0)) {
            pars.leftMargin = (int)(scrollablePart * positionOffset);
            tabBG.requestLayout();
        }

    }

    @Override
    public void onPageScrollStateChanged(int state) {
    }
});

何が問題なのかわかりません。同様の方法でアニメーション化するビューを備えた他の場所があり(ページャースライダーではなく、マージンを調整します)、スムーズです。また、ポケットベルのスクロールに応じて一部のビューの位置が動的に調整されるアプリも見ましたが、非常にスムーズです。

何か案が?前もって感謝します!

4

1 に答える 1

6

関係するアニメーションはすべてrequestLayout()遅くなります。ビューを移動するだけの場合は、、、TranslateAnimationまたは、などを使用します。View.offsetLeftAndRight()またはレイアウトに関連するものView.setTranslationX()は使用しないでください。requestLayout()

于 2013-02-08T01:21:14.570 に答える