一般.9图都是放在本地记载,但最近遇到一个产品需求,需要把.9图放后台配置使用。于是捣鼓了一番
首先我们需要把ui给的.9图自己再通过sdk的aapt再编译一次,输入png格式的图片给后台,才能为我们所用。
下面是操作步骤
1.我们准备一张.9图片,放在E盘(有时候ui给的.9需要我们自己先在as里面稍微改动一下 不然会报错,或者直接让ui给你图自己切.9)

2.找到我们的sdk安装路径,进入\build-tools\【version】下,可以看到aapt.

3.此时,我们通过cmd窗口,进入到此目录下面

4.执行命令 aapt s -i E:\img_guowang_out.png -o E:\img_guowang_out.png

5.执行完后,会发现E盘的出现 img_guowang_out.png

6.这就是我们想要的png,我们拿到后台进行配置就
7.代码加载,因为太多地方用到 所以在工具类里封装了一个方法
/**
* 网络加载.9图片
* LinearLayout 传进来的控件 根据自己需求可改动
*/
static Bitmap bitmap;
public static void setNinePathImage(Context context, LinearLayout llnickname, String url) {
//这里我加了判空处理
if (StringUtil.isNotEmpty(url)){
@SuppressLint("HandlerLeak")
Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.arg1) {
case 1:
Bundle bundle = msg.getData();
Bitmap bitmap1 = bundle.getParcelable("bitmap");
if (bitmap1 == null)
return;
byte[] chunk = bitmap1.getNinePatchChunk();
//判断当前是不是.9图 这里可以加else做相应的处理
if (NinePatch.isNinePatchChunk(chunk)) {
NinePatchDrawable npd = new NinePatchDrawable(context.getResources(), bitmap1, chunk, new Rect(), null);
llnickname.setBackground(npd);
llnickname.setPadding(DisplayUtil.dip2px(context,20),0,DisplayUtil.dip2px(context,20),0);
}
break;
}
}
};
//因为对.9图的处理需要用到bitmap,所以这里开启子线程转成bitmap,再用handle传输
new Thread(new Runnable() {
@Override
public void run() {
URL imageurl = null;
try {
imageurl = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
HttpURLConnection conn = (HttpURLConnection) imageurl.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
is.close();
Message message = new Message();
Bundle bundle = new Bundle();
bundle.putParcelable("bitmap", bitmap);
message.setData(bundle);
message.arg1 = 1;
mHandler.sendMessage(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}else {
llnickname.setBackground(null);
}
8、最后使用
Utils.setNinePathImage(context, llNickname, item.getUrl());
有个问题就是.9图也有适配问题 ,我用的是xx的图片去切.9,但是出来的效果在像素太低的手机上高度会比设计稿的大,只有用一个x的才符合,所以要么不去适配,要么后台返回多个尺寸 ,自己判断手机尺寸取对应值,要么.9放本地,我是跟后台产品ui都协商了,最终选择是不去适配 。
本文介绍了如何处理将.9图从服务器加载到Android应用中的需求。首先,需要通过SDK的aapt工具将.9图转换为PNG格式并上传至后台。然后在代码中封装方法实现动态加载,同时讨论了.9图的适配问题,建议在不同分辨率设备上可能需要不同尺寸的.9图。
1911

被折叠的 条评论
为什么被折叠?



