转载请注明出处:王亟亟的大牛之路
这些天一直在讲Material Design控件的内容,今天继续,说说CheckBox(妈蛋,好冷),上一篇的传送门:http://blog.csdn.net/ddwhan0123/article/details/50560638
老规矩,两部分,第一部分理论知识,第二部分代码
选择控制器
选择控制器允许用户选择选项。有三种类型:复选框、单选框以及开/关切换。选择控制器使用主题同样的颜色。(待会的代码主要讲的是单选按钮)
复选框
单选按钮
切换开关
官方对呈现的样式,颜色,透明度等都有严格的要求和定义,如下:
分为2个主题,1为白色主题,2为黑色主题
白色
开: Swatch 500, 透明度 100%
关: #000000, 透明度 54%
失效: #000000, 透明度 26%
黑色
开: Swatch 500, 透明度 100%
关: #FFFFFF, 透明度 70%
失效: #FFFFFF, 透明度 30%
这里补充下,你所有的点击操作都希望带有一定的外部反应(也就是之前一直有的,手指触控反馈,就是那个圈圈)
像这样:
这一部分的理论知识没有之前那么多,因为之前的一系列理论知识都是统一的,每个控件都有大体的设计方向,只是实现不同而已,我们来看下实现效果:
包结构:
部分功能寄存于我们之前的CustomView这个类,不理解的可以翻开之前的解释看下,很详细。
主要实现类就是CheckBox这个类,我们来读代码!!
public class CheckBox extends CustomView
26行,继承于我们之前的CustomView,是个RelativeLayout。
int backgroundColor = Color.parseColor("#4CAF50");
Check checkView;
boolean press = false;
boolean check = false;
OnCheckListener onCheckListener;
public CheckBox(Context context, AttributeSet attrs) {
super(context, attrs);
setAttributes(attrs);
}
28-40行,声明一些变量包括背景色,以及构造函数初始化View
// Set atributtes of XML to View
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
protected void setAttributes(AttributeSet attrs) {
setBackgroundResource(R.drawable.background_checkbox);
// Set size of view
setMinimumHeight(Utils.dpToPx(48, getResources()));
setMinimumWidth(Utils.dpToPx(48, getResources()));
// Set background Color
// Color by resource
int bacgroundColor = attrs.getAttributeResourceValue(ANDROIDXML,
"background", -1);
if (bacgroundColor != -1) {
setBackgroundColor(getResources().getColor(bacgroundColor));
} else {
// Color by hexadecimal
// Color by hexadecimal
int background = attrs.getAttributeIntValue(ANDROIDXML, "background", -1)