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

我不知道有什么问题,我有其他地方有一个视图,我以类似的方式制作动画(根据 -not pager-slider 调整边距)并且它很流畅。我也见过一个应用,其中一些视图的位置是根据寻呼机的滚动动态调整的,而且非常流畅。

任何想法?提前致谢!

4

1 回答 1

6

任何涉及的动画requestLayout()都会很慢。如果您要做的只是移动视图,请使用 aTranslateAnimationView.offsetLeftAndRight()orView.setTranslationX()等​​。不要使用requestLayout()或任何与布局相关的内容。

于 2013-02-08T01:21:14.570 回答