最近項(xiàng)目要使用.9圖的背景圖,這個(gè)背景圖要讀取后臺(tái)的配置文件。心想這不很簡單,直接把圖傳上去,直接加載就噢了。。。。。
畢竟還是太年輕了,踩坑入下
- 直接把.9圖傳到七牛云后,加載的圖片是有黑邊的,而且不會(huì)拉伸。找了一下資料需要對(duì)圖片做處理
- 對(duì)圖片重新輸出
使用sdk自帶的工具aapt對(duì).9圖重新輸出
aapt c -v -S point_9 -C point_10
以上的是批量輸出的指令。point_9是要轉(zhuǎn)換的.9圖的文件夾,point_10是轉(zhuǎn)換輸出的文件。在運(yùn)行指令是point_10要提前創(chuàng)建,不然會(huì)報(bào)錯(cuò)。詳細(xì)的aapt指令自行去查找,這里不做詳細(xì)介紹。 - 對(duì).9圖加載
private Drawable getNinePatchDrawable(Bitmap bitmap, Context context) {
byte[] chunk = bitmap.getNinePatchChunk();
NinePatchDrawable ninePatchDrawable = null;
if (NinePatch.isNinePatchChunk(chunk)) {
ninePatchDrawable = new NinePatchDrawable(context.getResources(), bitmap, chunk, new Rect(), null);
} else {
return new BitmapDrawable(context.getResources(), bitmap);
}
return ninePatchDrawable;
}
看到這代碼是不是覺得就ok了....
一開始的時(shí)候我也覺得是這樣了,可惜還是太年輕了
- 項(xiàng)目中我們使用的是Glide加載圖片,直接獲取個(gè)bitmap傳過去就噢了,一頓操作猛如虎
Glide.with(reference.get())
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.dontAnimate()
.dontTransform()
.override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
.load(url)
.listener(new RequestListener<Bitmap>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
//TODO 加載.9圖
return true;
}
})
.submit();
用了上面的方法就一路踩坑,怎么加載NinePatch.isNinePatchChunk(chunk)都識(shí)別不了.9圖
- 重新輸出圖片,aapt和放進(jìn)項(xiàng)目中打包解壓獲取的圖片都不行
人生路漫漫,一坑接著一坑
把輸出的圖片放到sd卡的文件夾,然后再去加載----激動(dòng)的心顫抖的手,竟然闊以。。。
那問題來了,什么原因造成的???
原來重新輸出的圖片,把.9的信息都保存在png的輔助信息了,如果對(duì)輸出的圖片做壓縮就會(huì)這些信息給去掉
校驗(yàn)的圖片上傳是沒有做壓縮的,那問題來了一定是glide對(duì)圖片進(jìn)行的壓縮處理,哎,沒有認(rèn)真讀過glide的源碼,填坑之路蛋疼
File file = Glide.with(reference.get())
.load(url)
.downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
.get();
只能把圖片下載后再去加載,佛祖保佑這次真的能加載出來了