onFinisInflate()从XML加载组件后回调
onSizeChanged()组件大小改变时回调
onMeasure(int widthMeasureSpec, int heightMeasureSpec)回调该方法来进行测量
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
// 如果指定了具体大小
if(widthMode == MeasureSpec.EXACTLY) {
width = widthSize;
} else {
width = 200;
}
int count = getChildCount(); // 通知子View对自身进行测量 for (int i = 0; i <count ; i++) { View childView = getChildAt(i); // 可能子View的宽高是match_parent,所以要将父控件的宽高传进去 measureChild(childView, widthMeasureSpec, heightMeasureSpec); }
onLayout()回调该方法来确定显示的位置
@Override protected void onLayout(boolean changed, int l, int t, int r, int b) { int childCount = getChildCount(); // 对子View进行布局 for (int i = 0; i < childCount; i++) { View child = getChildAt(i); if(child.getVisibility() != GONE) { child.layout(l, mScreenHeight * i, r, mScreenHeight * (i + 1)); } } }
onTouchEvent()监听到触摸事件时回调
onDraw(Canvas canvas)绘画
值得一提的是 :通常通过旋转画布来达到画量角器上的刻度的效果
canvas.save();// 可以理解成photoshop中的新建图层,让所有后续的操作在新的图层上进行
canvas.rotate();//旋转画布
for() {
绘画刻度
canvas.rotate();//旋转画布
}
canvas.restore();// 可以理解成photoshop中的合并图层,将新建图层与前面图层合并