xml
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Color name="颜色配置">
<A name="A">
<Node name="BackColor" describe="顶部工具栏的背景颜色" R="233" G="48" B="48" A="0.3" />
</A >
<B name="B">
<Node name="backColor" describe="底部工具栏的背景颜色" R="0" G="0" B="0" />
</B>
</Nodes>
java代码
HashMap<String,Integer> colorMap = new HashMap<>();
private void loadColorXml(String basePath, String startTag) {
String path = String.format("%s/skin/%s/color_set.xml", basePath, getSkin());
try {
FileInputStream fis = new FileInputStream(path);
XmlPullParser parser = Xml.newPullParser();
parser.setInput(fis, "UTF-8");
int type = parser.getEventType();
boolean startParser= false;
while (type != XmlPullParser.END_DOCUMENT) {
switch (type) {
case XmlPullParser.START_TAG: {
String szName = parser.getName();
if (szName.equals(startTag)){
startParser = true;
}
//未到起始节点直接跳过
if (!startParser){
break;
}
if (szName.equals("Node")) {
String name = parser.getAttributeValue(null, "name");
String red = parser.getAttributeValue(null, "R");
String green = parser.getAttributeValue(null, "G");
String blue = parser.getAttributeValue(null, "B");
String alpha = parser.getAttributeValue(null, "A");
colorMap.put(startTag + "_" + name,getColorByRgb(red,green,blue,alpha ));
}
}
break;
case XmlPullParser.END_TAG: {
String szName = parser.getName();
if (szName.equals(startTag)) {
return;
}
}
break;
}
type = parser.next();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private int getColorByRgb(String red,String green,String blue,String alpha){
Integer r = Integer.valueOf(red);
Integer g = Integer.valueOf(green);
Integer b = Integer.valueOf(blue);
int a = TextUtils.isEmpty(alpha) ? 255 : (int)(Float.valueOf(alpha) * 255);
return Color.argb(a,r,g,b);
}
解析{"rgb":"FFFFFF","alpha":"0.2"}
String rgb = colorJson.optString("rgb");
String alpha = colorJson.optString("alpha");
int alphaValue = (int) (Float.parseFloat(alpha) * 255);
int color = (!TextUtils.isEmpty(rgb)) ? Integer.parseInt(rgb, 16) : originalColor;
return (color | alphaValue << 24);
网友评论