当前位置: 首页 > 知识库问答 >
问题:

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

龙晟睿
2023-03-14

我正在使用毕加索在一个回收视图中显示许多小的ImageViews。当我单击ImageViews时,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();

        }
    });

我使用毕加索来防止我的应用程序出现内存崩溃。图像消失大约10毫秒,然后改变到另一个图像,在500毫秒后,它再次消失,然后改变回默认图像。它只是在我第一次点击其中的一个图像的时候才会让人失望,之后它就不会让人失望了。我认为这是因为毕加索加载图像的速度太慢。有没有一种方法可以先加载图像并在我点击按钮时显示它?

这里有一个GIF显示了它的样子:https://media.giphy.com/media/stlgbpxvt8b9ibvnqs/giphy.GIF在本例中它只会消失一次,但有时只需单击一次就会消失两次。

图像都是200x200,大约8KB。格式为.webp

我该如何防止这种情况发生?

共有1个答案

吴建中
2023-03-14

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

                    }
                }));

    }
});
 类似资料:
  • 我正在使用毕加索图书馆。我知道,如果我将图片从URL加载到图像视图中,有一种回调方法。但我不想加载到imageview中。相反,我想将其另存为位图。所以我用了下面的代码 我怎样才能得到一个回调方法,知道我的图像是成功下载使用毕加索? 不要说位图对象的空检查。这会导致错误。

  • 我面临毕加索无法快速加载图像的问题。 有3个显示左、中、右图像。在快进/后退时,对于给定的时间点,选择左、中、右并显示在三个框中。 这是初始化。缓存是100MB以及99MB的 窗口移动的图像数是3000。所以我将图像预加载为 平均图像大小为10KB-320x180,因此达到35MB,小于99MB。 当快速循环工作时,许多图像是(来自)和(来自),但在几个快速循环之后,3个图像冻结或变得非常慢。此时

  • 我正在使用volley向tmdb数据库发出RESTAPI请求,以加载有关电影的信息。回收器视图应显示缩略图图像海报。但它没有显示任何东西。我正在使用毕加索图书馆加载图像。图像链接构造得很好,我已经用log语句检查过了 主要活动。xml 列出项目布局。xml 主要活动 电影数据加载器

  • 我有一个从服务器加载映像的项目。我这样用毕加索, 多谢了。

  • 我可以使用Picasso库从文件系统加载图像吗? 我正在使用让用户从他的图库中选择一张照片,然后想要显示所选图像。 我已经有了获取图像文件系统Uri的工作代码,但无法获取毕加索。load()方法工作。

  • 问题内容: 我想使用Picasso在列表视图中一个接一个地加载三个连续的图像。使用毕加索提供的方法可以轻松做到这一点。但是,由于这些图像在不同的时间加载,因此在图像进入时会产生闪烁效果。例如,有时图像2出现在图像1之前,而当图像1加载时会导致不自然的结结。如果可以将listview的可见性设置为不可见,直到可以显示所有图像,那将更好。但是,我找不到用于毕加索的回调方法,该方法会在加载图像时发出信号