我正在尝试为我的图片视图构建一个控制器,它只需要一个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一秒钟,永远不会删除。
另外,如果您对如何编写我的控制器类有意见,我很高兴在这里。
谢谢大家的帮助。