.9.png是一種可以自定義拉伸特定區(qū)域的圖片格式。
在Android的UI設(shè)計(jì)開發(fā)中,很多控件需要適配不同的手機(jī)分辨率進(jìn)行拉伸或者壓縮,這樣就出現(xiàn)了可以任意調(diào)整大小的一種圖片格式“.9.png”。這種圖片是用于Android開發(fā)的一種特殊的圖片格式,它可以指定特定的區(qū)域進(jìn)行拉伸而不失真,同時(shí)可以指定前景內(nèi)容的顯示區(qū)域。即.9.png圖片的用處可以概括為以下兩點(diǎn):
- .9.png圖片在圖片拉伸的時(shí)候特定的區(qū)域不會發(fā)生圖片失真;
- .9.png圖片作為背景圖的時(shí)候可以指定內(nèi)容顯示區(qū)域;
一、.9.png圖片與普通圖片的對比

通過上面的對比,我們可以發(fā)現(xiàn),.9.png圖片周圍會有一條黑色的線條,這些黑色線條有什么作用呢?就是用于指定我們背景的拉伸區(qū)域或者前景內(nèi)容的顯示區(qū)域。

- 左邊黑線:縱向拉伸區(qū)域,必須要畫的,控制縱向拉伸,如上圖右側(cè)第一個(gè)小圖。
- 上邊黑線:橫向拉伸區(qū)域,必須要畫的,控制橫向拉伸,如上圖右側(cè)第二個(gè)小圖。
- 右邊黑線:可選,縱向內(nèi)容顯示區(qū)域
- 下邊黑線:可選,橫向內(nèi)容顯示區(qū)域
通過上面的的介紹,我們知道.9.png的四條邊上的黑線有哪些用途,那么我們將介紹下關(guān)于拉伸區(qū)域的界定。
拉伸區(qū)域

- 紅色框區(qū)域: 表示縱向拉伸區(qū)域,當(dāng)控件背景圖片需要進(jìn)行縱向拉伸時(shí),它只會拉伸紅色區(qū)域,其它區(qū)域不會拉伸。
- 綠色框區(qū)域:表示橫向拉伸區(qū)域,當(dāng)控件背景圖片需要進(jìn)行橫向拉伸時(shí),它只會拉伸綠色區(qū)域,其它區(qū)域不會拉伸。
- 紅綠相交區(qū)域:該段區(qū)域橫向和縱向都會拉伸。
前景內(nèi)容顯示區(qū)域

- 紅色框區(qū)域:指定橫向文本顯示的區(qū)域,限定文本左右能顯示到的邊界。
- 藍(lán)色框區(qū)域:指定縱向文本顯示的取,限定文本上下能顯示到的邊界。
二、.9.png圖片的制作
這么強(qiáng)大的一種圖片,在我們android開發(fā)中的適配環(huán)節(jié),起了很大的作用。那么怎么制作這種.9.png圖片呢?在Android的工具中給我們提供了draw9patch.bat工具來制作.9文件。該工具目錄在\android-sdk-windows\tools\draw9patch.bat。
我們直接打開draw9path.bat二進(jìn)制程序,將我們需要制作的圖片導(dǎo)入進(jìn)去。然后按住鼠標(biāo)左鍵進(jìn)行劃黑邊,如果畫錯(cuò)了,通過Shift+鼠標(biāo)左鍵進(jìn)行拖動(dòng)取消。
三、簡單體驗(yàn)
首先,我們通過簡單的布局文件看看普通圖片的展示效果。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
tools:context="dsw.iflytek.com.pngdemo.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/back"
android:layout_centerInParent="true"
android:text="Hello World!" />
</RelativeLayout>

在上面的效果圖沒有進(jìn)行自適應(yīng),兩邊的邊框已經(jīng)被文字嵌入進(jìn)去,所以我們要對圖片作如下修改:

在我們的處理中,通過對圖片添加縱橫向的拉伸,來保持背景的自適應(yīng)。這里需要我們注意指定的拉伸區(qū)域,需要我們仔細(xì)體會。


在上面我們對橫向拉伸區(qū)域有了一定認(rèn)識。下面看看內(nèi)容拉伸區(qū)域:

在上面的.9圖中,我們將整個(gè)右邊線作為內(nèi)容縱向顯示的區(qū)域,看看效果圖:

我們可以看到,內(nèi)容的顯示是緊緊填滿上下之間。沒有間隙。

在來看看效果圖:

通過上面對比,我們可以發(fā)現(xiàn)右側(cè)變現(xiàn)控制著內(nèi)容視圖的顯示區(qū)域的規(guī)律。
同樣底部也是一樣,在開發(fā)的過程中,合理的使用.9.png文件可以很好的優(yōu)化我們的資源文件,減小apk的包大小。也能進(jìn)行很好的適配效果。