Android 自定义View

本文介绍Android中View和ViewGroup的测量方法,包括onMeasure的使用、MeasureSpec的解析及不同模式的意义,并简要提及View的绘制流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

测量方法:

onMeasure()

size = MeasureSpec.getSize(widthMeasureSpec);
mode =MeasureSpec.getMode(heightMeasureSpec);

ViewGroup的onMeasure (简单范例)


自定义View的时候经常需要使用屏幕密度:

有两种获得屏幕密度的方式,一种是在Activity使用,另外一种是才是在自定义的View和ViewGroup中使用

在Activity中: 

getResources().getDisplayMetrics().density;
在自定义View中:

WindowManager wm = (WindowManager) context.getSystemService(
        Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
dm.density;

//这里后面两个参数传递的是父容器的width,height,从而来测量子容器的大小

measureChild(childView,widthMeasureSpec, heightMeasureSpec);


测量的三种模式:

EXACTLY  (精确模式)------  android:layout_width ="XXXdp"或者match_parent时使用

AT_MOST (最大值模式)------  android:layout_width ="wrap_content" 子控件的尺寸不会超过父控件

UNSPECIFIED(任意模式)  -------  想有多大就有多大(通常是自定义View才会用到)


View 的绘制

View绘制 需要画布(Canvas)

Canvas mCanvas = new Canvas(Bitmap bitmap)   ------>把位图和画布相关联


onLayout(VIewGroup才有)


OnDraw(自定义View才有)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值