我正在开发一个游戏,在每个场景的开头,我想预加载将要使用的图像,因此每次使用Glide加载图像时,它都不会闪烁。
以下是我的代码。基本上,我只是将Glide加载循环到imageview中,并且图像应该被缓存,至少我认为应该这样做:
for (int i : images) {
Glide.with(this).load(i).into(imageView);
}
imageView.setDrawable(null);
这似乎不起作用。每次第一次加载图像时,它仍然会闪烁。意味着图像没有被缓存。我在做什么错了?
答案 0 :(得分:2)
如果要缓存图像,则可能必须添加
.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
<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">