首页 > 解决方案 > 毕加索图书馆加载我的图像太慢?

问题描述

我正在使用 Picasso 在 RecyclerView 中显示许多小的 ImageView。当我单击它们时,ImageViews 将它们的 Image 更改为 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 和大约 8kb。格式为 .WEBP

我怎样才能防止这种情况?

标签: javaandroidimageimageviewpicasso

解决方案


这个想法是等待回调,然后将图像设置到图像视图中。这是通过使用 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() {

                    }
                }));

    }
});

推荐阅读