我想在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) {
    }
});


我不知道出了什么问题,我在其他地方也以类似的方式进行了动画处理(根据-not pager-slider调整边距),并且很流畅。我还看过一个应用程序,该应用程序的某些视图的位置根据寻呼机的滚动情况进行动态调整,并且非常流畅。

任何想法?提前致谢!

最佳答案

任何涉及requestLayout()的动画都会变慢。如果您只是想移动视图,请使用TranslateAnimationView.offsetLeftAndRight()View.setTranslationX()等。请勿使用requestLayout()或任何与布局有关的内容。

07-24 09:26