首页 > 解决方案 > 为什么我的 ImageView (Android Studio) 的图像仅在 onClick 方法结束时发生变化?

问题描述

以下代码显示了如何将图像从我的服务器加载到ImageView带有毕加索(在 Android 上)的图像中。我发现当方法完成时,图像中的图像ImageView正在改变——但我想在代码行执行时改变它。

btn_startlive.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){


    while(something_that_is_true_for_a_long_time){        
       Picasso.with(img_live.getContext()).load("http://localhost:8000/livepicture")
                      .networkPolicy(NetworkPolicy.NO_CACHE)
                      .placeholder(img_live.getDrawable())
                      .memoryPolicy(MemoryPolicy.NO_CACHE)
                      .into(img_live);
         }      


            }
        });

在这个例子中,图像没有改变。是因为方法没有结束吗?以及如何解决?

标签: javaandroidandroid-studioimageviewpicasso

解决方案


onClickListener()看起来不错。在您的 onClickListener() 方法SystemClock.sleep(2000);中停止您的应用程序(据我所知,所有线程)。因此,您的图像无法立即加载。

只需删除即可SystemClock.sleep(2000);

如果你想更有效地使用你的毕加索图书馆,你可以检查这个答案

如果删除 SystemClock.sleep() 后您的图像加载速度很慢(您说这只是为了展示您的案例),那么您的图像可能太大而无法处理。

如果您加载大量图像,请尝试使用 resize 以获得更好的内存性能:

Picasso.with(getActivity()).load(getPixId).resize('widthImageView', 'heightImageView').noFade().into(imageView);

编辑:如果您尝试将太大的图像文件加载到毕加索,它会延迟显示图像。为了消除与您的图像大小有关的问题,请.resize()在您的 Picasso 行中添加方法。

 Picasso.with(img_live.getContext())
.load("http://localhost:8000/livepicture") 
.networkPolicy(NetworkPolicy.NO_CACHE) 
.placeholder(img_live.getDrawable()) .memoryPolicy(MemoryPolicy.NO_CACHE)
.resize(100, 100) 
.into(img_live); // resizes the image to these dimensions (in pixel). does not respect aspect ratio 

推荐阅读