我需要创建一个自定义图像视图以通过设计选择颜色。当用户单击圆圈时,应显示带有勾号的内部白色圆圈,如下例所示:
否则,它应该只是带有某种颜色(未选中状态)的圆形,如下所示:
主要问题是,我不知道如何创建一个带有内部圆并保持以编程方式设置颜色的能力的选择器。
我可以设置简单的圆形形状,例如:
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/circle_crop"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_gravity="center"
android:src="@android:color/holo_red_dark" />
如何修改它以在选中状态(当用户单击它时)内打勾以设置白色圆圈?
太简单。
1.创建layer-list
Drawable
名为“ icon_check”的文件
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item //for the round white background
android:bottom="10dp" //margin, "<size>" tag doesn't work
android:end="10dp"
android:start="10dp"
android:top="10dp">
<shape
android:shape="oval">
<solid
android:color="@color/white" />
</shape>
</item>
<item
android:drawable="@drawable/check" //check mark from built-in asset
android:bottom="14dp" //margin, extra 4dp is prefered
android:end="14dp"
android:start="14dp"
android:top="14dp" />
</layer-list>
2.创建selector
Drawable
名为“ foreground_check”
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/icon_check" //layer-list created above
android:state_selected="true" />
<item
android:drawable="@android:color/transparent" //key point, 【"@null" doesn't work!!】
android:state_selected="false" />
</selector>
3.设定 CardView
<androidx.cardview.widget.CardView //【MaterialCardView doesn't work!!】
android:id="@+id/cardView"
android:layout_width="40dp"
android:layout_height="40dp"
android:foreground="@drawable/foreground_check" //apply layer-list drawable
app:cardBackgroundColor="@color/black"
app:cardCornerRadius="20dp" /> //half of side length
4.设置Ui控制器
cardView.setOnClickListener {
it.isSelected = !it.isSelected
}
结果:
好的!我想通过单击背景属性来实现此效果(而不是单击保留)。是否可以?
@Michael Abyzov这是一次单击,我没有抓住,请查看此完整演示:youtu.be/QMijeZ2mZUs。由于复选标记是覆盖元素(无论是视觉还是实际),因此我建议您不要将其与
CardView
或ImageView
背景混合使用,否则,这意味着您必须selector
drawable
为N种不同的颜色创建N个(因为未选中状态可绘制设置在selector
)中,这就是您想要的吗?我为您的疏忽感到抱歉,它可以像我想要的那样工作,并且没有嵌套视图。非常感谢!