1.什么是點9圖
.9.PNG是安卓開發(fā)里面的一種特殊的圖片嫉嘀,這種格式的圖片通過ADT自帶的編輯工具生成洞斯,使用九宮格切分的方法镊逝,使圖片支持在android 環(huán)境下的自適應展示触创。
.9圖片的作用就是在圖片拉伸的時候保證其不會失真薪丁。所以我們使用.9圖片锯蛀,讓圖片在指定的位置拉伸和在指定的位置顯示內容灭衷,這樣圖片的邊邊角角就不會出現失真了。
2.動態(tài)使用外部點9圖
.9.png圖片的使用旁涤,只需要簡單的放到res目錄下翔曲,在xml布局文件里當作普通的圖片來調用即可迫像。下圖是我要調用的圖片,放在src的drawable文件夾里
只需要在布局文件里當作普通的圖片使用即可瞳遍。
效果如下:
但是如果你要調用的點9圖不是在你打包的apk內部闻妓,而是位于sd卡上,這時候你直接調用它的話是得不到你想要的拉伸效果的
效果如下:
工程里面用的.9.png在打包的時候掠械,經過了aapt的處理由缆,成為了一張包含有特殊信息的.png圖片。而不是直接加載的.9.png這種圖片猾蒂。所以一般情況下我們需要自己手動的調用aapt命令來處理點9圖均唉。假設該路徑C:\Users\LGY\Desktop\fd\9下有一張待處理的點9圖
首先來到找到自己的Android SDK 路徑,例如我的sdk路徑是
C:\Users\LGY\AppData\Local\Android\android-sdk
那么我就到這個路徑下(build-tools下有很多個版本肚菠,選哪個都可以舔箭,這里選了21.1.0這個版本),在下面這個路徑里可以看到aapt.exe文 件C:\Users\LGY\AppData\Local\Android\android-sdk\build-tools\21.1.0
然后案糙,
在命令窗口里輸入 cd C:\Users\LGY\AppData\Local\Android\android-sdk\build-tools\21.1.0
然后就是處理圖片的命令了限嫌,命令如下:
aapt.exe c -v -S C:\Users\LGY\Desktop\fd\9 -C C:\Users\LGY\Desktop\fd
C:\Users\LGY\Desktop\fd\9是待處理的點9圖所在的文件夾怒医,
C:\Users\LGY\Desktop\fd是處理完成后稚叹,會生成一個同名的點9圖片,這張圖片就是我們需要的拿诸。
下圖是生成的圖片
然后在apk里我們就可以如下使用了扒袖。
Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
NinePatchDrawable npd = new NinePatchDrawable(TestActivity.this.getResources(), bitmap, bitmap.getNinePatchChunk(), new Rect(), null);
textView.setBackground(npd);
這樣的操作真的很繁瑣,直到我在網上看到一篇文章亩码,介紹得很好季率,還給出了為什么直接調用外部點9圖會得不到我們想要得效果(原因主要是NinePatchChunk的信息有無),它還說有個現成的包可以使用描沟。下面給出這個包的地址:
https://github.com/Anatolii/NinePatchChunk
這個包里的API我沒有仔細研究過飒泻,但是我試了一下確實有用,代碼如下:
/**
* 調用sd卡的.9圖
*/
private void setSdNinePatchDrawable(final TextView textView2)
{
new Thread(new Runnable() {
@Override
public void run() {
try {
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath(),"balloon_r_pressed.9.png");
if (file.exists()) {
final NinePatchDrawable drawable =
NinePatchChunk.create9PatchDrawable(
TestActivity.this,
BitmapFactory.decodeFile(file.getAbsolutePath()),
null);
new Handler(TestActivity.this.getMainLooper()).post(new Runnable() {
@Override
public void run() {
textView2.setBackground(drawable);
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
效果如下:
3.如何創(chuàng)建點9圖
這個在谷歌的官方文檔里有介紹吏廉,地址如下:
https://developer.android.com/studio/write/draw9patch.html
下面我也演示一下如何制作點9圖席覆。在Android Studio里你的項目里邊史辙,
右擊要制作成點9圖的圖片,點擊Create 9-Patch file
輸入要創(chuàng)建的點9圖名字
雙擊您的新 NinePatch 文件,將其在 Android Studio 中打開聊倔。您的工作區(qū)現在將打開晦毙。左側窗格是您的繪制區(qū)域,您可以在其中編輯可拉伸配線和內容區(qū)域的線條纵潦。右側窗格是預覽區(qū)域,您可以在其中預覽拉伸的圖形垃环。
具體操作請查看官方的文檔邀层。下面主要看一下效果。
如上圖是我制作的圖片遂庄,但是會報錯too many padding sections on bottom border寥院,按照網上說把右下角的黑線去掉就沒問題了。
效果如下:
可以看到中間的頭像沒有拉伸涛目,實現了我們要的效果秸谢。
4.參考文章
https://blog.csdn.net/tencent_bugly/article/details/52414034