Библиотека Пикассо загружает мои изображения слишком медленно? - PullRequest
2 голосов
/ 25 октября 2019

Я использую Picasso для отображения множества маленьких ImageViews в RecyclerView. ImageViews меняют свое изображение на 500 миллисекунд, когда я нажимаю на них, и меняем его обратно, когда заканчивается обработчик с 500 миллисекундами.

Это код:

    Picasso.get().load(imageResources[position]).into(holder1.itemImageView);

    holder1.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View v) {
            final Context context = v.getContext();
            Picasso.get().load(pressedResource[position]).into(holder1.itemImageView);
            new Handler().postDelayed(new Runnable() {
                public void run() {
                    Picasso.get().load(imageResources[position]).into(holder1.itemImageView);
                }
            }, 500);

            new Thread(new Runnable() {
                @Override
                public void run() {


                    EventHandlerClass.startMediaPlayer(v, soundID);
                }
            }).start();

        }
    });

Я использую Picasso для предотвращениямое приложение от получения OutOfMemory падает. Изображение исчезает примерно на 10 миллисекунд, затем изменяется на другое изображение, через 500 миллисекунд оно снова исчезает и затем возвращается к изображению по умолчанию. Он исчезает только в первый раз, когда я нажимаю на одно из изображений, после этого он работает без исчезновения. Я думаю, что это происходит потому, что Пикассо загружает изображение слишком медленно. Есть ли способ сначала загрузить изображение и отобразить его, когда я нажму на кнопку?

Вот GIF, который показывает, как это выглядит: https://media.giphy.com/media/STlGbpXvT8B9iBvnQS/giphy.gif В этом случае оно исчезает только один раз, ноиногда он исчезает дважды одним кликом.

Изображения размером 200x200 и размером около 8 КБ. Формат: .WEBP

Как я могу предотвратить это?

1 Ответ

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

Идея состоит в том, чтобы дождаться обратного вызова, а затем установить изображение в виде изображения. Это достигается с помощью CallbackListener.

Picasso.get().load(imageResources[position]).into(holder1.itemImageView);

holder1.itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(final View v) {
        final Context context = v.getContext();
        Picasso.get().load(pressedResource[position]).into(holder1.itemImageViewnew com.squareup.picasso.Callback() {

                    @Override
                    public void onSuccess() {
                     new Handler().postDelayed(new Runnable() {
                        public void run() {
                           Picasso.get().load(imageResources[position]).into(holder1.itemImageView);
                        }
                       }, 500);

                       new Thread(new Runnable() {
                        @Override
                        public void run() {
                         EventHandlerClass.startMediaPlayer(v, soundID);
                        }
                     }).start();
                    }

                    @Override
                    public void onError() {

                    }
                }));

    }
});
...