在onCreate()方法中获得view的宽高,用一般的方法,如下:
img = (ImageView) findViewById(R.id.test_img);
int width=img.getWidth();
int height=img.getHeight();
这时所获得的宽和高均为0,因为在onCreate方法时ImageView还没有绘制好,在这个时候获取得到的就是零。
那是否有办法在onCreate()方法中获得宽、高呢?网上搜索了下,有如下4中方法可以在onCreate()中获得对应控件的宽、高。
MainActivity中
private ImageView img;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("imageview", "onCreate.....");
img = (ImageView) findViewById(R.id.test_img);
measure1();
measure2();
measure3();
measure4();
}
- 方法一
private void measure1() {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.songjiang);
Log.i("imageview1", "width: " + bitmap.getWidth());
Log.i("imageview1", "height: " + bitmap.getHeight());
}
- 方法二
private void measure2() {
int w = View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED);
int h = View.MeasureSpec.makeMeasureSpec(0,
View.MeasureSpec.UNSPECIFIED);
img.measure(w, h);
Log.i("imageview2", "width: " + img.getMeasuredWidth());
Log.i("imageview2", "height: " + img.getMeasuredHeight());
}
- 方法三
private void measure3() {
ViewTreeObserver vto = img.getViewTreeObserver();
vto.addOnPreDrawListener(new OnPreDrawListener() {
@Override
public boolean onPreDraw() {
int height = img.getMeasuredHeight();
int width = img.getMeasuredWidth();
Log.i("imageview3", "width: " + width);
Log.i("imageview3", "height: " + height);
return true;
}
});
}
- 方法四
private void measure4() {
ViewTreeObserver vto = img.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
img.getViewTreeObserver().removeGlobalOnLayoutListener(this);
Log.i("imageview4", "width: " + img.getWidth());
Log.i("imageview4", "height: " + img.getHeight());
}
});
}