无法从视图

时间:2016-10-17 14:32:17

标签: android picasso

我正在尝试为我的图片视图构建一个控制器,它只需要一个ImageView和一个业务对象作为输入,并处理onCick事件,背景,默认图像,错误管理和Picasso。我希望有一种通用的方法来获取图像视图的实际像素大小,以便将其发送到我的Medias Web服务。

我已经阅读过多篇stackoverflow帖子,上面写着我可以使用ViewTreeObserver.OnGlobalLayoutListener来执行此操作:
公共课PicassoController {

private final static String TAG = "PicassoController";
private final boolean clic;

private final Context ctx;
private final ImageView iv;
private RecognizedMedia recognizedMedia;

private int height = -1;
private int width = -1;
int i = 0;

public PicassoController(final ImageView imageView, final RecognizedMedia media, boolean clic) {
    this.ctx = imageView.getContext();
    this.iv = imageView;
    this.clic = clic;
    this.recognizedMedia = media;

    imageView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

        @Override
        public void onGlobalLayout() {

                height = imageView.getMeasuredHeight();
                width = imageView.getMeasuredWidth();

                i++;
                Log.i(TAG, "onGlobalLayout : " + i);

                init();

                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
                    imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                } else {
                    imageView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                }

        }
    });
}

private void init() {
    if (recognizedMedia == null) {
        return;
    }

    if (recognizedMedia instanceof Media) {
        init((Media) recognizedMedia);
        if (clic) {
            LinkedMediaUtils.dealWithLinkedMedia(((Media) recognizedMedia).getLinkedMedia(), iv);
        }
    }
}

private void init(Media mMedia) {...}

public View.OnClickListener getOnClickListener() {...}

public interface RecognizedMedia {}

}

onGlobalLayout被称为twiced一秒钟,永远不会删除。

另外,如果您对如何编写我的控制器类有意见,我很高兴在这里。

谢谢大家的帮助。

0 个答案:

没有答案