如何动态分配戒指颜色
how dynamically assign ring color
我们可以定义一个环形可绘制对象并在布局 xml 文件中使用它,如下面的示例复制,
是否可以定义一个环形可绘制对象并在运行时动态更改颜色?用例在列表项中,不同项中的环可能具有不同的环颜色。
搜索并没有找到好的解决方案,如果有人有一些建议,不胜感激。
<ImageView
android:layout_width="10dp"
android:layout_height="10dp"
android:src="@drawable/ring" />
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:top="4dp"
android:right="4dp"
android:bottom="4dp"
android:left="4dp">
<shape
android:shape="oval">
<solid android:color="#4d4d4d" />
</shape>
</item>
<item>
<shape
android:shape="oval">
<stroke android:width="2dp"
android:color="#4d4d4d"/>
</shape>
</item>
First Put the Id to your layer draw able like that
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/shape1"
android:top="4dp"
android:right="4dp"
android:bottom="4dp"
android:left="4dp">
<shape
android:shape="oval">
<solid android:color="#4d4d4d" />
</shape>
</item>
<item
android:id="@+id/shape2"
>
<shape
android:shape="oval">
<stroke android:width="2dp"
android:color="#4d4d4d"/>
</shape>
</item>
</layer-list>
Code...
LayerDrawable shape = (LayerDrawable) ContextCompat.getDrawable(demo.this,R.drawable.ring);
GradientDrawable gradientDrawable1 = (GradientDrawable) shape.findDrawableByLayerId(R.id.shape1);
GradientDrawable gradientDrawable2 = (GradientDrawable) shape.findDrawableByLayerId(R.id.shape2);
gradientDrawable1.setColor(ContextCompat.getColor(demo.this,R.color.color_first));
gradientDrawable2.setColor(ContextCompat.getColor(demo.this,R.color.color_second));// changing to black color
ImageView imageView=(ImageView)findViewById(R.id.imageview);
imageView.setBackground(shape);
我们可以定义一个环形可绘制对象并在布局 xml 文件中使用它,如下面的示例复制,
是否可以定义一个环形可绘制对象并在运行时动态更改颜色?用例在列表项中,不同项中的环可能具有不同的环颜色。
搜索并没有找到好的解决方案,如果有人有一些建议,不胜感激。
<ImageView
android:layout_width="10dp"
android:layout_height="10dp"
android:src="@drawable/ring" />
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:top="4dp"
android:right="4dp"
android:bottom="4dp"
android:left="4dp">
<shape
android:shape="oval">
<solid android:color="#4d4d4d" />
</shape>
</item>
<item>
<shape
android:shape="oval">
<stroke android:width="2dp"
android:color="#4d4d4d"/>
</shape>
</item>
First Put the Id to your layer draw able like that
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/shape1"
android:top="4dp"
android:right="4dp"
android:bottom="4dp"
android:left="4dp">
<shape
android:shape="oval">
<solid android:color="#4d4d4d" />
</shape>
</item>
<item
android:id="@+id/shape2"
>
<shape
android:shape="oval">
<stroke android:width="2dp"
android:color="#4d4d4d"/>
</shape>
</item>
</layer-list>
Code...
LayerDrawable shape = (LayerDrawable) ContextCompat.getDrawable(demo.this,R.drawable.ring);
GradientDrawable gradientDrawable1 = (GradientDrawable) shape.findDrawableByLayerId(R.id.shape1);
GradientDrawable gradientDrawable2 = (GradientDrawable) shape.findDrawableByLayerId(R.id.shape2);
gradientDrawable1.setColor(ContextCompat.getColor(demo.this,R.color.color_first));
gradientDrawable2.setColor(ContextCompat.getColor(demo.this,R.color.color_second));// changing to black color
ImageView imageView=(ImageView)findViewById(R.id.imageview);
imageView.setBackground(shape);