java - 为什么我的 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);
}
}
});
在这个例子中,图像没有改变。是因为方法没有结束吗?以及如何解决?
解决方案
你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
推荐阅读
- java - 如何使用我的解决方案在 Java 中正确实现数组的合并排序?
- c# - 为什么 Asp.Net Core Kestrel 服务器向 Ngrok 返回 404 而控制器永远不会被调用?
- python - UPDATE 不更新我的数据库中的值
- powershell - 如何使用 Powershell 从 package.json 脚本中设置变量?
- sql - 用子查询的数据替换列行中的空值
- angular - 在 Angular 9 中,如何强制 http 客户端响应模型中的属性日期类型?
- javascript - $window.scroll(showScroll()) 不起作用但 onscoll="showScroll()" 是?
- python - 当滚动条没有带有 Selenium for python 的标签时向下滚动
- mysql - MySQL - 根据同一张表中的另一行值计算行值
- c++ - 是否可以按顺序执行“cout”?