package com.alibaba.weex.svg.component; import android.graphics.Color; import android.text.TextUtils; import com.alibaba.weex.svg.ParserHelper; import com.alibaba.weex.svg.SvgBrush; import com.alibaba.weex.svg.SvgParser; import com.taobao.weex.WXSDKInstance; import com.taobao.weex.dom.ImmutableDomObject; import com.taobao.weex.dom.WXDomObject; import com.taobao.weex.ui.component.WXComponentProp; import com.taobao.weex.ui.component.WXVContainer; import java.util.ArrayList; /** * Created by budao on 2017/3/2. */ public class WXSvgLinearGradient extends WXSvgDefs { private String mX1 = "0%"; private String mY1 = "0%"; private String mX2 = "100%"; private String mY2 = "0%"; public WXSvgLinearGradient(WXSDKInstance instance, WXDomObject dom, WXVContainer parent) { super(instance, dom, parent); } @WXComponentProp(name = "id") public void setName(String id) { mName = id; } @WXComponentProp(name = "x1") public void setX1(String x1) { mX1 = x1; } @WXComponentProp(name = "y1") public void setY1(String y1) { mY1 = y1; } @WXComponentProp(name = "x2") public void setX2(String x2) { mX2 = x2; } @WXComponentProp(name = "y2") public void setY2(String y2) { mY2 = y2; } @Override protected void saveDefinition() { if (mName != null) { ArrayList points = new ArrayList<String>(); points.add(mX1); points.add(mY1); points.add(mX2); points.add(mY2); ArrayList<Integer> stopColors = new ArrayList<>(); ArrayList<Float> stops = new ArrayList<>(); for (int i = 0; i < childCount(); i++) { if (getChild(i) instanceof WXSvgStop) { ImmutableDomObject domObject = getChild(i).getDomObject(); int color = Color.TRANSPARENT; if (!TextUtils.isEmpty((CharSequence) domObject.getAttrs().get("stopColor"))) { color = SvgParser.parseColor((String) domObject.getAttrs().get("stopColor")); } if (!TextUtils.isEmpty((CharSequence) domObject.getStyles().get("stopColor"))) { color = SvgParser.parseColor((String) domObject.getStyles().get("stopColor")); } float offset = ParserHelper.fromPercentageToFloat( (String) domObject.getAttrs().get("offset"), 1, 0, 1); stops.add(offset); stopColors.add(color); } } int[] colors = new int[stopColors.size()]; for (int i = 0; i < colors.length; i++) { colors[i] = stopColors.get(i); } float[] positions = new float[stops.size()]; for (int i = 0; i < positions.length; i++) { positions[i] = stops.get(i); } SvgBrush brush = new SvgBrush(SvgBrush.GradientType .LINEAR_GRADIENT, points, positions, colors); getSvgComponent().defineBrush(brush, mName); } } }