方法一:
int
w = View.MeasureSpec.makeMeasureSpec(
0
,
View.MeasureSpec.UNSPECIFIED);
int
h = View.MeasureSpec.makeMeasureSpec(
0
,
View.MeasureSpec.UNSPECIFIED);
imageView.measure(w, h);
int
height = imageView.getMeasuredHeight();
int
width = imageView.getMeasuredWidth();
方法二:
ViewTreeObserver vto = imageView.getViewTreeObserver();
vto.addOnPreDrawListener(
new
ViewTreeObserver.OnPreDrawListener() {
public
boolean
onPreDraw() {
vto.removeOnPreDrawListener(
this
);
int
height = imageView.getMeasuredHeight();
int
width = imageView.getMeasuredWidth();
return
true
;
}
});
这个方法,我们需要注册一个ViewTreeObserver的监听回调,这个监听回调,就是专门监听绘图的,既然是监听绘图,那么我们自然可以获取测量值了,同时,我们在每次监听前remove前一次的监听,避免重复监听。
方法3:
ViewTreeObserver vto = imageView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(
new
OnGlobalLayoutListener() {
@Override
public
void
onGlobalLayout() {
imageView.getViewTreeObserver().removeGlobalOnLayoutListener(
this
);
imageView.getHeight();
imageView.getWidth();
}
});