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方法。