前言
點9圖示一種可伸縮的位圖,如果你某個View用了點9圖做background,Android會根據(jù)點9圖的設置來自動為你調(diào)整、適應內(nèi)容拯钻。點9圖是標準的PNG格式圖像,被一圈1像素寬的邊緣包圍撰豺,并且保存的時候擴展名一定要是“.9.png”粪般,還要保存在“res/drawable/”目錄。
以上的官方對點9圖的介紹污桦。
簡單使用:
圖4是一個比較常見點9圖的使用亩歹,用這張點9圖做控件背景,控件會根據(jù)左邊點區(qū)域(圖4的點1)和上邊點區(qū)域(圖4的點2)做縱向和橫向的拉伸,拉伸后如圖5的效果小作。這也是我們使用比較多的情況亭姥。
但接下來我要講的不是點9圖自動拉伸的使用,而是講如何用點9圖來控制內(nèi)容顯示區(qū)域躲惰。
問題
相信很多人在開發(fā)過程中都有遇到過這樣的問題致份,設計切了一張下面帶陰影效果的Button背景圖变抽,如果直接拿來設置Background础拨,當設置文本時用android:gravity="center",你會發(fā)現(xiàn)文案會在背景偏下方的位置绍载。如下圖:
原因相信大家也知道诡宗,因為背景圖下方有陰影,所以整張圖(藍色框區(qū)域)的center自然不是我們想要的(紅色框)的center击儡。此時你可能自己利用android:padding屬性來謾慢調(diào)整位置塔沃,或者讓設計在上方加透明邊切成對稱的實現(xiàn)居中。
上面說的問題阳谍,其實也沒有什么工作量蛀柴,幾行代碼可以搞定。那看看下面這個問題
產(chǎn)品要求設計出如圖1矫夯,圖2的自定義控件鸽疾,里面的內(nèi)容支持圖片數(shù)字拼接和文本。設計給的背景圖如圖3训貌,內(nèi)容只能顯示在圖3右邊的框內(nèi)并居中制肮。
問題來了,此時再想讓控件里的內(nèi)容居中就比較麻煩了递沪,首先控件背景圖是不規(guī)則的豺鼻,顯示內(nèi)容的區(qū)域偏右,android:gravity="center"肯定不行款慨,另外文本的行數(shù)支持一行或兩行儒飒,數(shù)字拼接后的的圖片大小還不知道,不能通過android:padding寫死檩奠,怎樣才能讓控件的內(nèi)容一直處在右邊區(qū)域的中心呢桩了?
其實點9圖能很好地解決這種不對稱背景控制內(nèi)容位置的問題。
點9圖控制內(nèi)容區(qū)域
如圖9笆凌,大家都知道點1和點2的作用圣猎,但是很多人卻忽略了右邊點區(qū)域(點3)和下邊點區(qū)域(點4)的作用,它們其實可以控制縱向和橫向的顯示區(qū)域乞而。
上面問題中提到的自定義控件的問題送悔,用背景圖設置成點9圖如下
如圖6,點3和點4控制了縱向和橫向顯示的區(qū)域,此時它們橫縱相交的區(qū)域5就是內(nèi)容區(qū)域欠啤。如果用這張點9圖做控件背景荚藻,系統(tǒng)只會在區(qū)域5繪制控件內(nèi)容。
因此我們可以按照需求控制內(nèi)容顯示區(qū)域后洁段,再設置android:gravity="center"应狱,這樣無論里面的內(nèi)容怎么變化,一行或兩行祠丝,系統(tǒng)繪制時都會放在內(nèi)容區(qū)域的中心疾呻,那個復雜的位置問題就這樣輕松解決了。
同理写半,問題的button文案居中問題也可以用這個方法輕松解決岸蜗。
點9圖能很好的解決這種不對稱背景的控制內(nèi)容的問題。
END