May helpful, making custom view in kotlin.

Initiation Timing.

// 1.
init {
    
}
// 2.
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec)
}
// 3.
override fun onDraw(canvas: Canvas) {
    super.onDraw(canvas)
}
// 4.
override fun dispatchDraw(canvas: Canvas) {
    super.dispatchDraw(canvas)
}



Z position.

// 1.
override fun onDraw(canvas: Canvas) {
    super.onDraw(canvas)
    // 가장 밑에서 그러진다.
}
// 2.
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec)
    // 여기서 addview한 view는 onDraw의 canvas 보다 상단에 위치함.
}
// 3.
override fun dispatchDraw(canvas: Canvas) {
    super.dispatchDraw(canvas)
    // onDraw의 canvas와 onMeasure에서 add된 view들 보다도 가장 최상단에 그러지게 된다.
}