1. 程式人生 > >Android面試解密-自定義View

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. 決定是否攔截該手勢