Android:在Glide中预加载/缓存图像,加载时图像闪烁

问题描述 投票:0回答:1

我正在开发游戏,在每个场景的开始,我都想预加载将要使用的图像,因此,每次使用Glide加载图像时,它都不会闪烁。

以下是我的代码。基本上,我只是将Glide加载循环到imageview中,并且图像应该被缓存,至少我认为应该这样做:

for (int i : images) {
    Glide.with(this).load(i).into(imageView);
}

imageView.setDrawable(null); 

这似乎不起作用。每次第一次加载图像时,它仍然会闪烁。意味着图像没有被缓存。我在做什么错?

android android-glide
1个回答
0
投票

如果要缓存图像,则可能必须添加

.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">
© www.soinside.com 2019 - 2024. All rights reserved.