我正在开发游戏,在每个场景的开始,我都想预加载将要使用的图像,因此,每次使用Glide加载图像时,它都不会闪烁。
以下是我的代码。基本上,我只是将Glide加载循环到imageview中,并且图像应该被缓存,至少我认为应该这样做:
for (int i : images) {
Glide.with(this).load(i).into(imageView);
}
imageView.setDrawable(null);
这似乎不起作用。每次第一次加载图像时,它仍然会闪烁。意味着图像没有被缓存。我在做什么错?
如果要缓存图像,则可能必须添加
.diskCacheStrategy(DiskCacheStrategy.ALL)
为了使其在加载后不会闪烁,请检查下面的代码以供参考。
Glide.with(this)
.load(i)
.placeholder(R.drawable.default_image)
.error(R.drawable.default_image)
.override(200, 200)
.centerCrop()
.dontAnimate()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView);
并且如果您必须像在通常的游戏加载中一样,在同一图像视图中一张一张地加载图像,请选中此选项
int delay = 1000;
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
//do something
handler.postDelayed(this, delay);
if(i<imageArray.length){
Glide.with(MainActivity.this)
.load(i)
.placeholder(menuIcons[i])
.override(200, 200)
.centerCrop()
.dontAnimate()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(myImage);
i=i+1;
}else{
i=0;
Glide.with(MainActivity.this)
.load(i)
.placeholder(menuIcons[i])
.override(200, 200)
.centerCrop()
.dontAnimate()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(myImage);
i=i+1;
}
}
}, delay);
注意:您应该将android:largeHeap =“ true”添加到清单文件中,以避免Android:java.lang.OutOfMemoryError,就像这样
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:largeHeap="true"
android:theme="@style/AppTheme">