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

发布于 2022-09-02 15:16:02 字数 1261 浏览 13 评论 0

第一次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);
            }
        }
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

白云不回头 2022-09-09 15:16:02

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

viewpager.setAdapter(mAdapter);
viewpager.setCurrentItem(position);
少女的英雄梦 2022-09-09 15:16:02

我说一下吧,希望能帮到别人,我也是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,但是确实起作用了。

千鲤 2022-09-09 15:16:02

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

烟雨凡馨 2022-09-09 15:16:02

楼主解决了吗?

我也只是我 2022-09-09 15:16:02

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

做个ˇ局外人 2022-09-09 15:16:02

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

深爱不及久伴 2022-09-09 15:16:02

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

千と千尋 2022-09-09 15:16:02

楼主问题解决了吗? 我的也出现这个情况了

凉薄对峙 2022-09-09 15:16:02

楼主解决了吗?现在也遇到这个问题。通过下面的这样的方式解决的,感觉很蠢
mViewPager.setCurrentItem(1);
mViewPager.setCurrentItem(0);
mViewPager.invalidate();

你穿错了嫁妆 2022-09-09 15:16:02

重新setAdapter

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文