1.測量組件的大小,重寫onMeasure方法迄薄。注意琅关,如果測試的組件是容器,而容器的大小又依賴于子組件的大小讥蔽,需要先測量子組件的大小涣易,否則測量出來的結果永遠都是0.
2.如果組件為容器時,重寫onLayout方法冶伞,負責定位子組件的位置新症。這其實是一個遞歸的過程,如果子組件也是容器响禽,同樣需要重寫onLayout方法定位其子組件的位置偿洁,直到每一個組件都定位完成為止肪康。
3.組件繪制东涡,重寫onDraw方法错忱,組件不僅需要繪制自身,還需要繪制背景侯繁,進度條胖喳。容器組件一般不需要繪制,但需要重寫dispatchDraw方法繪制子組件贮竟。以ViewGroup為例丽焊,ViewGroup完全復用父類View的draw方法,draw方法主要做了以下四件事:a:繪制背景坝锰,background.draw(canvas)粹懒。b:onDraw(canvas)繪制自己。c:繪制進度條顷级,onDrawScrollBar(canvas);d:繪制子視圖凫乖,dispatchDraw(canvas)。ViewGroup重寫了dispatchDraw方法繪制其子組件。
總結:繼承View的組件需要重寫onMeasure帽芽,onDraw删掀,繼承ViewGroup的組件需要重寫onMeasure,onLayout导街,dispatchDraw方法