安卓ViewPager“滑动延迟”

3
我有一个包含3个片段的ViewPager Fragment,每个片段都有一张图片作为背景和一个TextView。TextView总是在屏幕左侧绝对位置(而不是Fragment本身)。当我用手指移动片段时,它保持正确的位置,即使我移动得很快。但是当我让它滑入其他Fragment时,TextView就不能保持正确的位置,看起来像是延迟了。
它应该像这两张图片一样保持不变:

enter image description here enter image description here

 @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        SingleTabFragment singleTabFragment = (SingleTabFragment) mSectionsPagerAdapter.getRegisteredFragment(position);
        TextView textView = singleTabFragment.getNonResizingTextView();
        ViewGroup.MarginLayoutParams marginLayoutParams = (ViewGroup.MarginLayoutParams)textView.getLayoutParams();
        marginLayoutParams.leftMargin = positionOffsetPixels;
        textView.setLayoutParams(marginLayoutParams);

    }

我真的不知道问题出在哪里。我尝试了多种方法,我添加了Thread.sleep(50);来查看是否也会发生这种情况。是的,在那里也不能正常工作。我该如何解决这个问题?

编辑:

现在我已经放在中间了。但问题仍然存在。

这是它应该看起来的样子(我知道,帧数不太够。但我想你会明白我的意思): enter image description here

如果我让它滑动,它看起来像这样:

enter image description here


你能否发布一个具有该行为的gif吗? - azizbekian
@azizbekian 是的,我已经编辑过了。 - user6586661
4个回答

1

使用textView.setTranslationX(positionOffsetPixels);代替边距


1
您可以使用以下方法来完成相同的操作,而不是在onPageScrolled中进行操作:
mPager.setPageTransformer(false, new FadePageTransformer());

public class FadePageTransformer implements ViewPager.PageTransformer {
        public void transformPage(View view, float position) {
            view.setAlpha(1 - Math.abs(position));
                    if (position < 0) {
                        view.setScrollX(-(int) ((float) (view.getWidth()) * -position));
                    } else if (position > 0) {
                        view.setScrollX((int) ((float) (view.getWidth()) * position));
                    } else {
                        view.setScrollX(0);
                    }
        }
    }

1
 TextView textView = singleTabFragment.getNonResizingTextView();
 textView.translationX = positionOffsetPixels;

不应该执行marginLayoutParams.leftMargin = positionOffsetPixels;,因为更改边距可能会更改视图的位置,这将导致每帧重新布局视图。这就是为什么会出现延迟。更改translationX只会更改视图的绘制方式,而不是它的位置。

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接