更改 ImageView 的背景很慢

Posted

技术标签:

【中文标题】更改 ImageView 的背景很慢【英文标题】:Changing background of ImageView is slow 【发布时间】:2020-05-25 02:19:35 【问题描述】:

我正在创建一个应用程序,每次显示新报价时我都会更改背景图像。 我正在使用 ImageView,这些图片都是 jpg 文件。它们存储在 xxhdpi 下的 mipmap 文件夹中,因为图像对于 drawable 文件夹来说太大了。

但是,当我使用以下方法设置新的 ImageView 时:

background.setBackgroundResource(backgrounds.get(counter));

将显示新图片,但有半秒的延迟。那不是很酷,我只是想顺利地设置新图片。

我认为发布整个代码没有用。最重要的部分:

引用存储在 ArrayList 中,如下所示:

ArrayList<Integer> backgrounds;

在 onCreate() 之后,我正在填写这样的列表:

backgrounds = new ArrayList<>();
backgrounds.add((Integer) R.mipmap.background1);
backgrounds.add((Integer) R.mipmap.background2);
backgrounds.add((Integer) R.mipmap.background3);
backgrounds.add((Integer) R.mipmap.background4);

图片大小在 100KB 到 7MB 之间。

谁能告诉我为什么加载缓慢以及如何改进它?还有,把那些放在mipmap下的xxhdpi文件夹里对吗?

感谢您的每一个回答!

【问题讨论】:

7MB jpeg 必须有很大的分辨率。 1920x1080 通常对所有设备都足够了,您不需要 4K。您可以提供多种分辨率,先加载较小的分辨率,然后在加载完成后显示较大的分辨率。延迟很可能是由于图像被加载到内存。不过我建议你使用像 Glide 或 Picasso 这样的库来为你处理。 实现github.com/square/picasso和github.com/bumptech/glide你的问题就解决了 我现在用毕加索 【参考方案1】:

你的问题下有一些有效的 cmets,但我会添加我的作为答案:)

    减小图像大小至关重要 - 使用 JPG 而不是 PNG,降低分辨率可以节省一些时间和设备电池。 尝试将这些图像放在drawable-nodpi 文件夹下 - 这样可以避免不必要的图像缩放。我假设您的应用中只有一个背景实例。

没有太多可以提高背景设置速度的方法,尤其是当图像已经在 APK 中烘焙时。

【讨论】:

图片已经是 jpg。我把它们都放在drawable/nodpi中,但结果相同。不过,谢谢你【参考方案2】:

它现在工作正常。图片太大了,我将它们的大小从 2-3MB 减小到了 ~25KB。它们仍然看起来不错并且可以正常加载。

【讨论】:

以上是关于更改 ImageView 的背景很慢的主要内容,如果未能解决你的问题,请参考以下文章

如何使 ImageView 出现在圆圈内的随机位置?

如何在 javafx imageView 中获取显示图像的宽度/高度?

在Android中通过ArrayAdapter在ListView中单击单个ImageView背景后如何更改它?

ImageView.scaleType属性意义

ImageView 显示本地和网上的图片(转)

用手指调整 ImageView 的高度