ps:本文用于自己学习代码转载以下链接 http://www.2cto.com/kf/201410/341592.html
代码一:自己来测量
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的监听回调,这个监听回调,就是专门监听绘图的,既然是监听绘图,那么我们自然可以获取测量值了,同时,我们在每次监听前remove前一次的监听,避免重复监听。
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
;
}
});
代码三:与第2个方法基本相同,但他是全局的布局改变监听器,所以是最推荐使用的。
ViewTreeObserver
vto = imageView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(
new
OnGlobalLayoutListener() {
@Override
public
void
onGlobalLayout() {
imageView.getViewTreeObserver().removeGlobalOnLayoutListener(
this
);
imageView.getHeight();
imageView.getWidth();
}
});