毕加索图书馆加载我的图像太慢?

时间:2019-10-25 18:12:28

标签: java android image imageview picasso

我正在使用毕加索在RecyclerView中显示许多小的ImageView。 当我单击它们时,ImageView会将其图像更改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来防止我的应用因内存不足而崩溃。 图像消失大约10毫秒,然后更改为另一个图像,在500毫秒后再次消失,然后又变回默认图像。 它仅在我第一次单击图像时消失,在此之后它不会消失。 我认为这是因为Picasso加载图像的速度太慢。 单击按钮时,是否可以先加载图像并显示它?

以下是一个GIF,显示了它的外观:https://media.giphy.com/media/STlGbpXvT8B9iBvnQS/giphy.gif 在这种情况下,它只消失一次,但有时一键消失两次。

图像全部为200x200,大约8kb。格式为.WEBP

如何防止这种情况?

1 个答案:

答案 0 :(得分:1)

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

                    }
                }));

    }
});