测量方法:
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才有)