gpt4 book ai didi

android - 使用 Picasso 在后台线程上同步图像加载 - 没有 .get()

转载 作者:太空狗 更新时间:2023-10-29 15:33:27 26 4
gpt4 key购买 nike

我有一个可以在两个地方重复使用的自定义 View 组(包含 Picasso 加载的图像):

  1. 在应用程序中(在 UI 线程上)显示给用户
  2. 绘制到 Canvas 上并保存为 .jpeg(在后台线程上)

我绘制到 Canvas 的代码如下所示:

int measureSpec = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY);
view.measure(measureSpec, measureSpec);
Bitmap bitmap =
Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
view.draw(canvas);

问题是在我将 View 绘制到 Canvas 之前没有时间加载图像。我在这里尽量避免耦合,所以我不想添加 Picasso 回调,因为正在绘制的类不知道它正在绘制的 View 。

我目前正在通过将图像加载代码更改为 .get() 而不是 .load() 然后使用 imageView 来解决这个问题。设置图像位图()。不幸的是,这给 View 增加了很多复杂性,我真的不喜欢它。

我想做的是将一个选项传递给 Picasso 的 RequestCreator,请求应该在当前线程上同步执行(如果是主线程则抛出异常)。我想知道这是否过于极端,无法直接内置到 Picasso 中?还是它已经在 API 中但我​​没有注意到它?

最佳答案

这是我的解决方案:

/**
* Loads the request into an imageview.
* If called from a background thread, the request will be performed synchronously.
* @param requestCreator A request creator
* @param imageView The target imageview
* @param callback a Picasso callback
*/
public static void into(RequestCreator requestCreator, ImageView imageView, Callback callback) {
boolean mainThread = Looper.myLooper() == Looper.getMainLooper();
if (mainThread) {
requestCreator.into(imageView, callback);
} else {
try {
Bitmap bitmap = requestCreator.get();
imageView.setImageBitmap(bitmap);
if (callback != null) {
callback.onSuccess();
}
} catch (IOException e) {
if (callback != null) {
callback.onError();
}
}
}
}

关于android - 使用 Picasso 在后台线程上同步图像加载 - 没有 .get(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27239203/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com