From 1e6ec937527ebeb00d4cadb0c968ccc65d2d1496 Mon Sep 17 00:00:00 2001 From: Nolan Lawson Date: Tue, 28 Jul 2015 15:54:56 -0400 Subject: [PATCH] Fix parsing of consecutive floats (fixes #20) --- .../vector/compat/demo/MainActivity.java | 6 ++++++ .../com/wnafee/vector/compat/PathParser.java | 13 +++++++++++++ library/src/main/res/drawable/basic_bezier.xml | 18 ++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 library/src/main/res/drawable/basic_bezier.xml diff --git a/demo/src/main/java/com/wnafee/vector/compat/demo/MainActivity.java b/demo/src/main/java/com/wnafee/vector/compat/demo/MainActivity.java index 031d76d..9ab6bf9 100644 --- a/demo/src/main/java/com/wnafee/vector/compat/demo/MainActivity.java +++ b/demo/src/main/java/com/wnafee/vector/compat/demo/MainActivity.java @@ -20,6 +20,7 @@ import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuItem; +import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.Toast; @@ -27,6 +28,7 @@ import com.wnafee.vector.MorphButton; import com.wnafee.vector.MorphButton.MorphState; import com.wnafee.vector.MorphButton.OnStateChangedListener; +import com.wnafee.vector.compat.ResourcesCompat; @TargetApi(Build.VERSION_CODES.LOLLIPOP) public class MainActivity extends ActionBarActivity { @@ -56,6 +58,10 @@ public void onStateChanged(MorphState changedTo, boolean isAnimating) { LinearLayout ll = (LinearLayout) findViewById(R.id.base_view); ll.addView(mb); + + ImageView bezierImageView = new ImageView(this); + bezierImageView.setImageDrawable(ResourcesCompat.getDrawable(this, R.drawable.basic_bezier)); + ll.addView(bezierImageView); } diff --git a/library/src/main/java/com/wnafee/vector/compat/PathParser.java b/library/src/main/java/com/wnafee/vector/compat/PathParser.java index 14b8a9f..0fe983c 100644 --- a/library/src/main/java/com/wnafee/vector/compat/PathParser.java +++ b/library/src/main/java/com/wnafee/vector/compat/PathParser.java @@ -203,6 +203,7 @@ private static float[] getFloats(String s) { private static void extract(String s, int start, ExtractFloatResult result) { // Now looking for ' ', ',' or '-' from the start. int currentIndex = start; + boolean foundDot = false; boolean foundSeparator = false; result.mEndWithNegSign = false; for (; currentIndex < s.length(); currentIndex++) { @@ -212,6 +213,18 @@ private static void extract(String s, int start, ExtractFloatResult result) { case ',': foundSeparator = true; break; + case '.': + if (foundDot) { + // Some SVG compressors will try to be clever and include strings like + // "1.5.5", which really means "1.5 0.5". + // So we need to count the number of dots and consider it a separator + // if we've already seen one. + foundSeparator = true; + currentIndex--; // because the next float needs to include the "." + } else { + foundDot = true; + } + break; case '-': if (currentIndex != start) { foundSeparator = true; diff --git a/library/src/main/res/drawable/basic_bezier.xml b/library/src/main/res/drawable/basic_bezier.xml new file mode 100644 index 0000000..72e3ec7 --- /dev/null +++ b/library/src/main/res/drawable/basic_bezier.xml @@ -0,0 +1,18 @@ + + + +