From 8e0fb39a785c48426e271263720ca09d6c347986 Mon Sep 17 00:00:00 2001 From: Horcrux Date: Wed, 27 Jul 2016 16:00:26 +0800 Subject: [PATCH] add FillOpacity strokeOpacity for gradients on Android --- .../main/java/com/horcrux/svg/PropHelper.java | 28 +++++++++---------- .../com/horcrux/svg/RNSVGPathShadowNode.java | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/android/src/main/java/com/horcrux/svg/PropHelper.java b/android/src/main/java/com/horcrux/svg/PropHelper.java index 24f35bf9..86f62a11 100644 --- a/android/src/main/java/com/horcrux/svg/PropHelper.java +++ b/android/src/main/java/com/horcrux/svg/PropHelper.java @@ -126,12 +126,12 @@ import java.util.regex.Pattern; final int nativeInt; } - private static void parseGradientStops(ReadableArray value, int stopsCount, float[] stops, int[] stopsColors) { + private static void parseGradientStops(ReadableArray value, int stopsCount, float[] stops, int[] stopsColors, float opacity) { int startStops = value.size() - stopsCount; for (int i = 0; i < stopsCount; i++) { stops[i] = (float) value.getDouble(startStops + i); stopsColors[i] = Color.argb( - (int) (value.getDouble(i * 4 + 3) * 255), + (int) (value.getDouble(i * 4 + 3) * 255 * opacity), (int) (value.getDouble(i * 4) * 255), (int) (value.getDouble(i * 4 + 1) * 255), (int) (value.getDouble(i * 4 + 2) * 255)); @@ -139,7 +139,7 @@ import java.util.regex.Pattern; } } - public void setupPaint(Paint paint, RectF box, float mScale) { + public void setupPaint(Paint paint, RectF box, float scale, float opacity) { float height = box.height(); float width = box.width(); float midX = box.centerX(); @@ -151,13 +151,13 @@ import java.util.regex.Pattern; int stopsCount = mColors.size() / 5; int[] stopsColors = new int[stopsCount]; float[] stops = new float[stopsCount]; - parseGradientStops(mColors, stopsCount, stops, stopsColors); + parseGradientStops(mColors, stopsCount, stops, stopsColors, opacity); if (mType == GradientType.LINEAR_GRADIENT) { - float x1 = PropHelper.fromPercentageToFloat(mPoints.getString(0), width, offsetX, mScale); - float y1 = PropHelper.fromPercentageToFloat(mPoints.getString(1), height, offsetY, mScale); - float x2 = PropHelper.fromPercentageToFloat(mPoints.getString(2), width, offsetX, mScale); - float y2 = PropHelper.fromPercentageToFloat(mPoints.getString(3), height, offsetY, mScale); + float x1 = PropHelper.fromPercentageToFloat(mPoints.getString(0), width, offsetX, scale); + float y1 = PropHelper.fromPercentageToFloat(mPoints.getString(1), height, offsetY, scale); + float x2 = PropHelper.fromPercentageToFloat(mPoints.getString(2), width, offsetX, scale); + float y2 = PropHelper.fromPercentageToFloat(mPoints.getString(3), height, offsetY, scale); paint.setShader( new LinearGradient( x1, @@ -168,13 +168,13 @@ import java.util.regex.Pattern; stops, Shader.TileMode.CLAMP)); } else { - float rx = PropHelper.fromPercentageToFloat(mPoints.getString(2), width, 0f, mScale); - float ry = PropHelper.fromPercentageToFloat(mPoints.getString(3), height, 0f, mScale); - float cx = PropHelper.fromPercentageToFloat(mPoints.getString(4), width, offsetX, mScale); - float cy = PropHelper.fromPercentageToFloat(mPoints.getString(5), height, offsetY, mScale) / (ry / rx); + float rx = PropHelper.fromPercentageToFloat(mPoints.getString(2), width, 0f, scale); + float ry = PropHelper.fromPercentageToFloat(mPoints.getString(3), height, 0f, scale); + float cx = PropHelper.fromPercentageToFloat(mPoints.getString(4), width, offsetX, scale); + float cy = PropHelper.fromPercentageToFloat(mPoints.getString(5), height, offsetY, scale) / (ry / rx); // TODO: support focus point. - //float fx = PropHelper.fromPercentageToFloat(mPoints.getString(0), width, offsetX) * mScale; - //float fy = PropHelper.fromPercentageToFloat(mPoints.getString(1), height, offsetY) * mScale / (ry / rx); + //float fx = PropHelper.fromPercentageToFloat(mPoints.getString(0), width, offsetX) * scale; + //float fy = PropHelper.fromPercentageToFloat(mPoints.getString(1), height, offsetY) * scale / (ry / rx); Shader radialGradient = new RadialGradient( cx, cy, diff --git a/android/src/main/java/com/horcrux/svg/RNSVGPathShadowNode.java b/android/src/main/java/com/horcrux/svg/RNSVGPathShadowNode.java index 92215a52..50dbaa16 100644 --- a/android/src/main/java/com/horcrux/svg/RNSVGPathShadowNode.java +++ b/android/src/main/java/com/horcrux/svg/RNSVGPathShadowNode.java @@ -310,7 +310,7 @@ public class RNSVGPathShadowNode extends RNSVGVirtualNode { mPath.computeBounds(box, true); } PropHelper.RNSVGBrush brush = getSvgShadowNode().getDefinedBrush(colors.getString(1)); - brush.setupPaint(paint, box, mScale); + brush.setupPaint(paint, box, mScale, opacity); } else { // TODO: Support pattern. FLog.w(ReactConstants.TAG, "RNSVG: Color type " + colorType + " not supported!");