仿Ios滑动开关按钮

效果图

实现思路

外层是一个圆角矩形,内层则是一个小圆形,如果细细观看,会发现外层还是有一层灰色的边框的,至少滑动的动画,我们可以考虑Scroller或者其他的动画效果。

具体代码

这里我们使用了自定义属性,所以要在values目录下建立一个attrs.xml文件,

<attr name="onBackground" format="reference"></attr> 开启时背景的颜色
<attr name="offBackground" format="reference"></attr> 关闭时背景的颜色
<attr name="circleColor" format="reference"></attr> 圆形的颜色
<attr name="time" format="integer"></attr> 动画执行的时间
<attr name="layout_width" format="dimension"></attr> 默认宽度
<attr name="layout_height" format="dimension"></attr> 默认高度

自定义一个控件这里我们就叫ButtonView,可以继承于Button也可以继承于View,这里我们就继承自View,正好复习一个看看Android内部如何实现的单击事件,看一下其原理。

重写第构造函数,这里重写构造函数我习惯重写第三个构造函数,但是遇到一些问题,记录一下,避免大家犯同样的错误。

例如

public ButtonView(Context context) {
    this(context,null);
}

public ButtonView(Context context, AttributeSet attrs) {
    this(context, attrs,-1);
    //初始化的一些代码
}

public ButtonView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

这么写本身是没问题,运行起来效果也是没问题的,但是当我们使用findViewById()的话获取到的则是null,其实这里只需要把-1改成0即可,至于为什么,大家可以参考一下Android的源代码。这里我就直接重写第二个构造函数了。

public ButtonView(Context context, Att
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值