Android 自定义View

测量方法:

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才有)


你可能感兴趣的:(Android 自定义View)