Android 自定义视图中毕加索的逻辑并发问题
我正在创建一个自定义的Android 自定义视图中毕加索的逻辑并发问题,android,multithreading,picasso,Android,Multithreading,Picasso,我正在创建一个自定义的视图,该视图显示由毕加索框架加载的位图中的图像。要成功初始化,我需要位图和视图度量。我正在努力处理线程,因为我无法预测哪个线程会更早完成 视图在其构造函数中以自定义目标启动毕加索。它将视图的宽度和大小保存在onSizeChanged中 public class FigureView extends View { public FigureView(Context context) { super(context); target = new LoadPic
视图
,该视图显示由毕加索框架加载的位图
中的图像。要成功初始化,我需要位图和视图度量。我正在努力处理线程,因为我无法预测哪个线程会更早完成
视图在其构造函数中以自定义目标启动毕加索。它将视图的宽度和大小保存在onSizeChanged
中
public class FigureView extends View {
public FigureView(Context context) {
super(context);
target = new LoadPictureTarget();
Picasso.with(getContext()).load(R.drawable.amalka).into(target);
}
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
tilesRect.set(0, 0, w, h);
}
目标设置位图并计算调整大小的图片尺寸以适应视图的可用空间:
class LoadPictureTarget implements Target {
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
baseBitmap = bitmap;
origPictureRect = new Rect(0, 0, baseBitmap.getWidth(), baseBitmap.getHeight());
scaledPictureRect = Misc.centerHorizontally(tilesRect.width(), tilesRect.height(), baseBitmap.getWidth(), baseBitmap.getHeight()); invalidate();
}
public void onBitmapFailed(Drawable errorDrawable) { }
public void onPrepareLoad(Drawable placeHolderDrawable) { }
}
问题是有时调用onBitmapLoaded
的时间早于onSizeChanged
。但不总是这样,所以我也不能将新的维度计算移到那里。现在我把它移到了onPaint()
,但这不是一个解决方案,因为一旦我有了位图和可用空间尺寸,我就需要执行密集的位图操作
当我需要视图大小时,用毕加索实现自定义视图的正确方法是什么