ViewPager每次notifyDataSetChanged之后,所设置的PageTransformer显示就出问题?

第一次setPageTransformer之后可以正常使用,但是当notifyDataSetChanged之后,其显示就有问题。但是只要viewpager一滑动,PageTransformer的效果就有了。
正常情况下我设置的PageTransformer是这样的,两边没有显示的比较小,而当前位置的显示大:
图片描述
但是当notifyDataSetChanged之后,显示效果成这个样子了:
图片描述
不过只要有滑动,显示效果又没问题了。

这是个什么情况,要如何notifyDataSetChanged之后就可以显示PageTransformer的效果?
下面是我的PageTransformer的代码(个人感觉这个代码是没有问题的):

 private class Transformer implements ViewPager.PageTransformer {

        private final float MIN_SCALE = 0.8f;
        @Override
        public void transformPage(View page, float position) {
            if(position >= -1 && position <= 1) {
                page.setScaleX(1.0f - Math.abs(position) * (1 - MIN_SCALE));
                page.setScaleY(1.0f - Math.abs(position) * (1 - MIN_SCALE));
            } else {
                page.setScaleX(MIN_SCALE);
                page.setScaleY(MIN_SCALE);
            }
        }
    }
阅读 13.7k
10 个回答

用了个蛋疼的方法解决的。

viewpager.setAdapter(mAdapter);
viewpager.setCurrentItem(position);
新手上路,请多包涵

我说一下吧,希望能帮到别人,我也是notifyDataSetChanged后,那个效果消失,其实调用vp.setCurrentItem(position);就可以解决问题,但是,必须跳转到跟notifyDataSetChanged之前不同的item才可以出现左右变小的效果,如果想回到之前的item,就得先vp.setCurrentItem(新item);然后vp.setCurrentItem(原来的item);但是这样还是不会有效果,因为viewpager的缓存机制,所以,必须要有一定延迟才可以,所以,我弄了个曲线救国的方式,不是很优雅,大概是这样的

    
private void refreshVp(){
    adapter.notifyDataSetChanged();
    vp.setCurrentItem(newPostion);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            vp.setCurrentItem(oldPosition);
        }
    }, 1);
}

这样有一定延迟,时间很短,1ms,但是确实起作用了。

我的没问题啊 。 你是如何notifyDataSetChanged的?

新手上路,请多包涵

楼主解决了吗?

新手上路,请多包涵

想问下 楼主解决这个问题了嘛

新手上路,请多包涵

大佬 你这问题解决了吗?我也遇到这问题,现在是暂时重新new Adapter但是刷新会重新加载图片。

新手上路,请多包涵

你的ViewPager里面显示多少项,就调用setOffscreenPageLimit(*)设置多少项,我当时碰到的问题是设置setCurrentItem的时候显示图片那种样式。原因是跳转到某个页面之后,前后两个页面还没来得及加载出来,所以动画执行的没效果。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏