我有一个自定义视图组(包含加载毕加索的图像),可以在两个地方重用:
我绘制到画布的代码如下所示:
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);
Run Code Online (Sandbox Code Playgroud)
问题是在我将视图绘制到画布之前没有时间加载图像.我试图尽量避免在这里进行耦合,所以我不想添加Picasso回调,因为正在进行绘制的类对它正在绘制的视图一无所知.
我目前正在通过将图像加载代码更改为.get()而不是.load()然后使用来解决此问题imageView.setImageBitmap().不幸的是,这给视图增加了很多复杂性,我真的不喜欢它.
我想做的是向Picasso的RequestCreator传递一个选项,即请求应该在当前线程上同步执行(如果它是主线程则抛出异常).我想知道这对于直接建立毕加索的支持来说是不是太过分了?或者它已经在API中了,我对此无动于衷?
Jac*_*bak 12
这是我的解决方案:
/**
* 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();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8533 次 |
| 最近记录: |