Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 自定义视图中毕加索的逻辑并发问题_Android_Multithreading_Picasso - Fatal编程技术网

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()
,但这不是一个解决方案,因为一旦我有了位图和可用空间尺寸,我就需要执行密集的位图操作

当我需要视图大小时,用毕加索实现自定义视图的正确方法是什么