HYDK v3.0.0版本的 MD5 值为:36b96e4c5561390bc72ab66c2f29a92f
以下内容为反编译后的 SvgToPath.java 源代码,内容仅作参考
package com.github.siyamed.shapeimageview.path.parser;
import android.graphics.Matrix;
import android.graphics.Path;
import android.graphics.RectF;
import android.util.Log;
import com.ehking.sdk.wepay.ui.activity.AddBankCardActivity;
import com.google.android.exoplayer2.text.ttml.TtmlNode;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Deque;
import java.util.HashMap;
import java.util.LinkedList;
import org.kxml2.io.KXmlParser;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import p.a.y.e.a.s.e.net.r5;
import p.a.y.e.a.s.e.net.te2;
public class SvgToPath {
private static final float DPI = 72.0f;
private static final Matrix IDENTITY_MATRIX = new Matrix();
public static final String TAG = "SvgToPath";
private final XmlPullParser atts;
private float height;
private Path path;
private float width;
private HashMap<String, String> idXml = new HashMap<>();
private final RectF rect = new RectF();
private float dpi = 72.0f;
private boolean hidden = false;
private int hiddenLevel = 0;
private boolean inDefsElement = false;
private final Deque<Path> pathStack = new LinkedList();
private final Deque<Matrix> matrixStack = new LinkedList();
private PathInfo pathInfo = null;
private SvgToPath(XmlPullParser xmlPullParser) {
this.atts = xmlPullParser;
}
public static PathInfo getSVGFromInputStream(InputStream inputStream) {
return parse(inputStream, true, 72.0f);
}
private static PathInfo parse(InputStream inputStream, boolean z, float f) {
try {
KXmlParser kXmlParser = new KXmlParser();
SvgToPath svgToPath = new SvgToPath(kXmlParser);
svgToPath.setDpi(f);
if (z) {
kXmlParser.setInput(new InputStreamReader(inputStream));
svgToPath.processSvg();
} else {
CopyInputStream copyInputStream = new CopyInputStream(inputStream);
KXmlParser kXmlParser2 = new KXmlParser();
kXmlParser2.setInput(new InputStreamReader(copyInputStream.getCopy()));
IdHandler idHandler = new IdHandler(kXmlParser2);
idHandler.processIds();
svgToPath.idXml = idHandler.idXml;
kXmlParser.setInput(new InputStreamReader(copyInputStream.getCopy()));
svgToPath.processSvg();
}
return svgToPath.pathInfo;
} catch (Exception e) {
Log.w(TAG, "Parse error: " + e);
throw new RuntimeException(e);
}
}
private Path popPath() {
Path pop = this.pathStack.pop();
this.path = this.pathStack.peek();
return pop;
}
private Matrix popTransform() {
return this.matrixStack.pop();
}
private void pushPath() {
Path path = new Path();
this.path = path;
this.pathStack.add(path);
}
private void pushTransform(Matrix matrix) {
if (matrix == null) {
matrix = IDENTITY_MATRIX;
}
this.matrixStack.push(matrix);
}
private void pushTransform(XmlPullParser xmlPullParser) {
String stringAttr = ParseUtil.getStringAttr("transform", xmlPullParser);
this.matrixStack.push(stringAttr == null ? IDENTITY_MATRIX : TransformParser.parseTransform(stringAttr));
}
private String showAttributes(XmlPullParser xmlPullParser) {
String str = "";
for (int i = 0; i < xmlPullParser.getAttributeCount(); i++) {
StringBuilder g = r5.g(str, AddBankCardActivity.WHITE_SPACE);
g.append(xmlPullParser.getAttributeName(i));
g.append("='");
g.append(xmlPullParser.getAttributeValue(i));
g.append("'");
str = g.toString();
}
return str;
}
public void endElement() {
String name = this.atts.getName();
if (this.inDefsElement) {
if (name.equals("defs")) {
this.inDefsElement = false;
return;
}
return;
}
if (name.equals("svg")) {
Path popPath = popPath();
popPath.transform(popTransform());
this.pathInfo = new PathInfo(popPath, this.width, this.height);
} else if (name.equals("g")) {
if (this.hidden) {
int i = this.hiddenLevel - 1;
this.hiddenLevel = i;
if (i == 0) {
this.hidden = false;
}
}
Path popPath2 = popPath();
popPath2.transform(popTransform());
this.path.addPath(popPath2);
}
}
public final Float getFloatAttr(String str, XmlPullParser xmlPullParser) {
return getFloatAttr(str, xmlPullParser, null);
}
public final Float getFloatAttr(String str, XmlPullParser xmlPullParser, Float f) {
Float convertUnits = ParseUtil.convertUnits(str, xmlPullParser, this.dpi, this.width, this.height);
return convertUnits == null ? f : convertUnits;
}
public void processSvg() throws XmlPullParserException, IOException {
int eventType = this.atts.getEventType();
do {
if (eventType == 2) {
startElement();
} else if (eventType == 3) {
endElement();
}
eventType = this.atts.next();
} while (eventType != 1);
}
public void setDpi(float f) {
this.dpi = f;
}
public void startElement() {
ArrayList<Float> arrayList;
String name = this.atts.getName();
if (this.inDefsElement) {
return;
}
if (name.equals("svg")) {
this.width = Math.round(getFloatAttr("width", this.atts, Float.valueOf(0.0f)).floatValue());
this.height = Math.round(getFloatAttr("height", this.atts, Float.valueOf(0.0f)).floatValue());
NumberParse numberParseAttr = NumberParse.getNumberParseAttr("viewBox", this.atts);
pushPath();
Matrix matrix = IDENTITY_MATRIX;
if (numberParseAttr != null && (arrayList = numberParseAttr.numbers) != null && arrayList.size() == 4) {
float f = this.width;
if (f < 0.1f || this.height < -0.1f) {
this.width = numberParseAttr.numbers.get(2).floatValue() - numberParseAttr.numbers.get(0).floatValue();
this.width = numberParseAttr.numbers.get(3).floatValue() - numberParseAttr.numbers.get(3).floatValue();
} else {
matrix.setScale(f / (numberParseAttr.numbers.get(2).floatValue() - numberParseAttr.numbers.get(0).floatValue()), this.height / (numberParseAttr.numbers.get(3).floatValue() - numberParseAttr.numbers.get(1).floatValue()));
}
}
pushTransform(matrix);
return;
}
if (name.equals("defs")) {
this.inDefsElement = true;
return;
}
if (name.equals("use")) {
String stringAttr = ParseUtil.getStringAttr("xlink:href", this.atts);
String stringAttr2 = ParseUtil.getStringAttr("transform", this.atts);
String stringAttr3 = ParseUtil.getStringAttr("x", this.atts);
String stringAttr4 = ParseUtil.getStringAttr("y", this.atts);
StringBuilder j = r5.j("<g", " xmlns='http://www.w3.org/2000/svg' ", " xmlns:xlink='http://www.w3.org/1999/xlink' ", " xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd' ", " xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape' version='1.1'");
if (stringAttr2 != null || stringAttr3 != null || stringAttr4 != null) {
j.append(" transform='");
if (stringAttr2 != null) {
j.append(ParseUtil.escape(stringAttr2));
}
if (stringAttr3 != null || stringAttr4 != null) {
j.append("translate(");
j.append(stringAttr3 != null ? ParseUtil.escape(stringAttr3) : "0");
j.append(te2.lite_const);
j.append(stringAttr4 != null ? ParseUtil.escape(stringAttr4) : "0");
j.append(")");
}
j.append("'");
}
for (int i = 0; i < this.atts.getAttributeCount(); i++) {
String attributeName = this.atts.getAttributeName(i);
if (!"x".equals(attributeName) && !"y".equals(attributeName) && !"width".equals(attributeName) && !"height".equals(attributeName) && !"xlink:href".equals(attributeName) && !"transform".equals(attributeName)) {
r5.K(j, AddBankCardActivity.WHITE_SPACE, attributeName, "='");
j.append(ParseUtil.escape(this.atts.getAttributeValue(i)));
j.append("'");
}
}
j.append(">");
j.append(this.idXml.get(stringAttr.substring(1)));
j.append("</g>");
return;
}
if (name.equals("g")) {
if (this.hidden) {
this.hiddenLevel++;
}
if ("none".equals(ParseUtil.getStringAttr("display", this.atts)) && !this.hidden) {
this.hidden = true;
this.hiddenLevel = 1;
}
pushTransform(this.atts);
pushPath();
return;
}
if (!this.hidden && name.equals("rect")) {
Float floatAttr = getFloatAttr("x", this.atts, Float.valueOf(0.0f));
Float floatAttr2 = getFloatAttr("y", this.atts, Float.valueOf(0.0f));
Float floatAttr3 = getFloatAttr("width", this.atts);
Float floatAttr4 = getFloatAttr("height", this.atts);
Float floatAttr5 = getFloatAttr("rx", this.atts, Float.valueOf(0.0f));
Float floatAttr6 = getFloatAttr("ry", this.atts, Float.valueOf(0.0f));
Path path = new Path();
if (floatAttr5.floatValue() > 0.0f || floatAttr6.floatValue() > 0.0f) {
this.rect.set(floatAttr.floatValue(), floatAttr2.floatValue(), floatAttr3.floatValue() + floatAttr.floatValue(), floatAttr4.floatValue() + floatAttr2.floatValue());
path.addRoundRect(this.rect, floatAttr5.floatValue(), floatAttr6.floatValue(), Path.Direction.CW);
} else {
path.addRect(floatAttr.floatValue(), floatAttr2.floatValue(), floatAttr3.floatValue() + floatAttr.floatValue(), floatAttr4.floatValue() + floatAttr2.floatValue(), Path.Direction.CW);
}
pushTransform(this.atts);
path.transform(popTransform());
this.path.addPath(path);
return;
}
if (!this.hidden && name.equals("line")) {
Float floatAttr7 = getFloatAttr("x1", this.atts);
Float floatAttr8 = getFloatAttr("x2", this.atts);
Float floatAttr9 = getFloatAttr("y1", this.atts);
Float floatAttr10 = getFloatAttr("y2", this.atts);
Path path2 = new Path();
path2.moveTo(floatAttr7.floatValue(), floatAttr9.floatValue());
path2.lineTo(floatAttr8.floatValue(), floatAttr10.floatValue());
pushTransform(this.atts);
path2.transform(popTransform());
this.path.addPath(path2);
return;
}
if (!this.hidden && name.equals("circle")) {
Float floatAttr11 = getFloatAttr("cx", this.atts);
Float floatAttr12 = getFloatAttr("cy", this.atts);
Float floatAttr13 = getFloatAttr("r", this.atts);
if (floatAttr11 == null || floatAttr12 == null || floatAttr13 == null) {
return;
}
Path path3 = new Path();
path3.addCircle(floatAttr11.floatValue(), floatAttr12.floatValue(), floatAttr13.floatValue(), Path.Direction.CW);
pushTransform(this.atts);
path3.transform(popTransform());
this.path.addPath(path3);
return;
}
if (!this.hidden && name.equals("ellipse")) {
Float floatAttr14 = getFloatAttr("cx", this.atts);
Float floatAttr15 = getFloatAttr("cy", this.atts);
Float floatAttr16 = getFloatAttr("rx", this.atts);
Float floatAttr17 = getFloatAttr("ry", this.atts);
if (floatAttr14 == null || floatAttr15 == null || floatAttr16 == null || floatAttr17 == null) {
return;
}
this.rect.set(floatAttr14.floatValue() - floatAttr16.floatValue(), floatAttr15.floatValue() - floatAttr17.floatValue(), floatAttr16.floatValue() + floatAttr14.floatValue(), floatAttr17.floatValue() + floatAttr15.floatValue());
Path path4 = new Path();
path4.addOval(this.rect, Path.Direction.CW);
pushTransform(this.atts);
path4.transform(popTransform());
this.path.addPath(path4);
return;
}
if (this.hidden || !(name.equals("polygon") || name.equals("polyline"))) {
if (!this.hidden && name.equals("path")) {
Path doPath = PathParser.doPath(ParseUtil.getStringAttr("d", this.atts));
pushTransform(this.atts);
doPath.transform(popTransform());
this.path.addPath(doPath);
return;
}
if ((this.hidden || !name.equals(TtmlNode.TAG_METADATA)) && !this.hidden) {
Log.d(TAG, String.format("Unrecognized tag: %s (%s)", name, showAttributes(this.atts)));
return;
}
return;
}
NumberParse numberParseAttr2 = NumberParse.getNumberParseAttr("points", this.atts);
if (numberParseAttr2 != null) {
Path path5 = new Path();
ArrayList<Float> arrayList2 = numberParseAttr2.numbers;
if (arrayList2.size() > 1) {
path5.moveTo(arrayList2.get(0).floatValue(), arrayList2.get(1).floatValue());
for (int i2 = 2; i2 < arrayList2.size(); i2 += 2) {
path5.lineTo(arrayList2.get(i2).floatValue(), arrayList2.get(i2 + 1).floatValue());
}
if (name.equals("polygon")) {
path5.close();
}
pushTransform(this.atts);
path5.transform(popTransform());
this.path.addPath(path5);
}
}
}
}