Android自定义View里面获取宽高及dp和px间的转换

本文详细介绍了如何在Android自定义View的onMeasure和onDraw方法中获取View的宽度和高度,并提供了dp与px之间的转换方法。在onMeasure中通过MeasureSpec获取尺寸,而在onDraw中使用getWidth()和getHeight()获取实际像素值。同时,给出了dp转px和px转dp的辅助函数,帮助开发者进行屏幕适配。
摘要由CSDN通过智能技术生成

Android自定义View里面获取宽高及dp和px间的转换

在自定义View的onMeasure和onDraw里面获取View的宽高

onMesure先被调用:

@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        // 获取宽-测量规则的模式和大小
        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
        int widthSize = MeasureSpec.getSize(widthMeasureSpec);

        // 获取高-测量规则的模式和大小
        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
        int heightSize = MeasureSpec.getSize(heightMeasureSpec);
        //获取xml里面设置的宽高的像素值
        Log.e(LOG_TAG,"widthSize="+widthSize+",heightSize="+heightSize);
    }

onDraw在OnMesure后被调用。

   @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // 获取控件的高度和宽度
        int width = getWidth();
        int height = getHeight();
        //获取的宽度值为:450px
        Log.e(LOG_TAG,"onDraw="+width);
        // 设置圆的半径 = 宽,高最小值的2分之1
        int r = Math.min(width, height)/2;
        // 画出圆(蓝色)
        // 圆心 = 控件的中央,半径 = 宽,高最小值的2分之1
        canvas.drawCircle(width/2,height/2,r,mPaint1);
    }
dp和px间的转换
    private float dpToPx(float dp, Context context){
        float scale=context.getResources().getDisplayMetrics().density;
        return dp*scale+0.5f;
    }

    private float pxToDp(float px,Context context){
        float scale=context.getResources().getDisplayMetrics().density;
        return (px-0.5f)/scale;
    }

Android官网:将 dp 单位转换为像素单位
https://developer.android.google.cn/training/multiscreen/screendensities?hl=zh_cn#java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值