Android面試解密-自定義View
一、為什麼要自定義控制元件:
1.特定的顯示分格
2.處理特有的使用者互動
3.優化我們的佈局
4.封裝等
二、如何自定義View
1.自定義屬性的宣告與獲取
2.測量onMeasure
3.佈局onLayout(ViewGroup)
4.繪製onDraw
5.onTouchEvent
6.onInterceptTonchEvent(ViewGroup)
自定義的宣告與獲取
1.分析需要的自定義屬性
2.在res/values/attrs.xml定義宣告
3.在layout xml檔案中進行使用
4.在View的構造方法中進行獲取
測量onMeasure
1.測量模式EXACTLY->match_parent, AT_MOST->wrap_content, UNSPECIFIED不受限制
2.MeasureSpec
3.setMeasureDimension
4.requestLayout()
佈局onLayout(ViewGroup)
1.決定子View的位置
2.儘可能將onMeasure中操作移動到此方法中,比如耗時,初始化的工作,因為onLayout只執行一次
3.requestLayout(),觸發onLayout方法
繪製onDraw
1.繪製內容區域
2.invalidate()可在U執行緒呼叫, postInvalidate()在子執行緒中呼叫,重繪
3.Canvas.drawXXX
4.translate、rotate、scale、skew
5.save(), restore()
onTouchEven
1. ACTION_DOWN
ACTION_MOVE
ACTION_UP
2. ACTION_POINTER_DOWN(多點觸控)
ACTION_POINTER_UP(多點觸控)
3. parent.requestDisallowInterceptTonchEvent(true)
4.VelocityTracker 檢測滑動速度
onInterceptTonchEvent(ViewGroup)
1. ACTION_DOWN
ACTION_MOVE
ACTION_UP
2. ACTION_POINTER_DOWN(多點觸控)
ACTION_POINTER_UP(多點觸控
3. 決定是否攔截該手勢