在onCreate()方法中获得view的宽高

在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();
    }
  1. 方法一
private void measure1() {
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
                R.drawable.songjiang);
        Log.i("imageview1", "width: " + bitmap.getWidth());
        Log.i("imageview1", "height: " + bitmap.getHeight());
    }
  1. 方法二
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());
    }
  1. 方法三
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;
            }
        });
    }
  1. 方法四
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());
            }
        });
    }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值