从 shape drawable 获取渐变资源
Get gradient resource from shape drawable
我似乎真的被以下问题困住了:
我在 XML 文件中定义了一个形状,描述如下:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/star_shape_item">
<rotate android:fromDegrees="45">
<shape android:shape="oval" >
<gradient
android:endColor="#32816f6f"
android:gradientRadius="40%p"
android:startColor="#ffffff"
android:type="radial" >
</gradient>
<stroke
android:width="1dp"
android:color="@android:color/darker_gray" />
</shape>
</rotate>
</item>
</layer-list>
我在 canvas 上多次绘制这个形状。
现在,我想做的是能够在我的编程代码中动态更改渐变的中心。
我可以通过以下方式从我的资源中获取形状:
LayerDrawable layers = (LayerDrawable) ContextCompat.getDrawable(context, R.drawable.star_shape);
RotateDrawable starShape = (RotateDrawable)(layers.findDrawableByLayerId(R.id.star_shape_item));
但是我如何从中获取 GradientDrawable?
终于找到答案以防其他人遇到类似问题:
LayerDrawable layers = (LayerDrawable) ContextCompat.getDrawable(context, R.drawable.star_shape);
RotateDrawable starShape = (RotateDrawable) (layers.findDrawableByLayerId(R.id.star_shape_item));
GradientDrawable shapeGradient = (GradientDrawable) starShape.getDrawable();
我似乎真的被以下问题困住了:
我在 XML 文件中定义了一个形状,描述如下:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/star_shape_item">
<rotate android:fromDegrees="45">
<shape android:shape="oval" >
<gradient
android:endColor="#32816f6f"
android:gradientRadius="40%p"
android:startColor="#ffffff"
android:type="radial" >
</gradient>
<stroke
android:width="1dp"
android:color="@android:color/darker_gray" />
</shape>
</rotate>
</item>
</layer-list>
我在 canvas 上多次绘制这个形状。
现在,我想做的是能够在我的编程代码中动态更改渐变的中心。 我可以通过以下方式从我的资源中获取形状:
LayerDrawable layers = (LayerDrawable) ContextCompat.getDrawable(context, R.drawable.star_shape);
RotateDrawable starShape = (RotateDrawable)(layers.findDrawableByLayerId(R.id.star_shape_item));
但是我如何从中获取 GradientDrawable?
终于找到答案以防其他人遇到类似问题:
LayerDrawable layers = (LayerDrawable) ContextCompat.getDrawable(context, R.drawable.star_shape);
RotateDrawable starShape = (RotateDrawable) (layers.findDrawableByLayerId(R.id.star_shape_item));
GradientDrawable shapeGradient = (GradientDrawable) starShape.getDrawable();