Android: предварительная загрузка / кэширование изображений в Glide, изображение мигает при загрузке - PullRequest
0 голосов
/ 28 октября 2019

Я занимаюсь разработкой игры, и в начале каждой сцены я хотел бы предварительно загрузить изображения, которые буду использовать, чтобы они не мигали при каждой загрузке изображений с помощью Glide.

Ниже приведен мой код. По сути, я просто зацикливаю загрузку Glide в изображение, и изображение должно кэшироваться, по крайней мере, это то, что я думаю, что оно должно делать:

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

imageView.setDrawable(null); 

Это, похоже, не работает. Он по-прежнему мигает каждый раз при загрузке изображения. Это означает, что изображение не кэшируется. Что я делаю не так?

1 Ответ

0 голосов
/ 28 октября 2019

Если вы хотите кэшировать изображение, возможно, вам придется добавить

.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">
...