【发布时间】:2014-12-01 23:20:50
【问题描述】:
我有一个自定义视图组(包含毕加索加载的图像),可以在两个地方重复使用:
- 在应用程序中显示给用户(在 UI 线程上)
- 绘制到画布并保存为 .jpeg(在后台线程上)
我绘制到画布的代码如下所示:
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);
问题是在我将视图绘制到画布之前没有时间加载图像。我试图在这里尽可能地避免耦合,所以我不想添加 Picasso 回调,因为正在绘制的类对它正在绘制的视图一无所知。
我目前正在通过将图像加载代码更改为 .get() 而不是 .load() 然后使用 imageView.setImageBitmap() 来解决此问题。不幸的是,这给视图增加了很多复杂性,我真的不喜欢它。
我想做的是向 Picasso 的 RequestCreator 传递一个选项,即请求应该在当前线程上同步执行(如果它是主线程则抛出异常)。我想知道这对于直接内置到 Picasso 中的支持是否太过分了?还是它已经在 API 中而我没有注意到它?
【问题讨论】:
-
您可以尝试为此使用自定义毕加索转换 - 将其添加为您的请求的一部分并运行您粘贴在那里的代码
-
感谢您的想法 - 不过,该图像只是自定义视图组的一小部分,因此我不确定它是否适用于这种情况。
-
啊,好的,很高兴您最终能够找到解决方案