1. 程式人生 > >Android中View面試相關

Android中View面試相關

什麼是View?

Android.app.View 就是手機的UI,View 負責繪製UI,處理事件(evnet),Android 利用 View 打造出所 Widgets,利用 Widget 可打造出互動式的使用者介面,每個View 負責一定區域的繪製。

View 座標的基本概念

View的寬高是有top、left、right、bottom引數決定的 而X,Y和translationX,和translationY則負責View位置的改變。

從Android3.0開始,加入了translation的概念,即相對於父容器的偏移量以及X,Y座標的概念,X,Y代表左上頂點的橫縱座標。當View在發生平移時,getX,getY,setX,setY
get/setTranslationX/Y來獲得當前左上點的座標。

X=left+translationX Y同理。

注意:在View發生改變的過程中,top,left等值代表原始位置,是不會改變的。改變的只有X,Y,translationX/Y。

 View繪製

View繪製機制:

    view樹的繪製流程、measure、layout、draw

   view樹的繪製流程:

    measure<是否重新計算檢視大小> --->layout<是否重新安置檢視位置>----->draw<是否需要重繪>   是一個遞迴過程

---measure測量:樹的遞迴過程,自上而下有序進行遍歷

引數

1、ViewGroup.LayoutParams:設定寬高

2、MeasureSpec:測量規格,包含兩種,一種是測量它的模式;第二種是在這種模式下測量的大小。

重要方法

1、measure:最終還是呼叫了onMeasure方法

2、onMeasure:測量邏輯的方法,兩個引數,寬高的測量規格。抽象方法,需要自定義。

3、setMeasuredDimension():將測量好的規格,完成整個測量過程

layout:樹的遞迴過程,自上而下有序進行遍歷。根據測量的尺寸來擺放子檢視的位置。

1、layout:最終呼叫onLayout方法

2、onLayout:抽象方法,需要自定義。分垂直方向和水平方向的佈局。

---onDraw:

---兩個容易混淆的方法<回撥>:

1、invalidate():請求系統,如果檢視沒有發生變化就不會繪製。

2、requestLayout():當佈局發生變化的時候<方向、尺寸>會呼叫,它就會去出發measure和layout方法,但是它不會呼叫draw方法。