【Android】自定义控件开关小例子

很多时候我都在想,是不是自己可以弄一个控件给自己用,然后....今天学到了,居然真的可以这样做。以开关小按钮为例子。

首先,定义一个类toggle继承view,在layout布局中可以直接把这个控件导包到布局中(记得设置id以便之后find)。

1、继承后出现了三个构造方法,第一个是方便在代码中操作的,第二个是方便xml,第三个是方便xml和风格。哪个方便自己用哪个。AttributeSet一般存放xml中的资源。

2、设置该控件的ui资源,可以在toggle类中创建这样的方法(复合ui推荐用此,即bitmap类中的BitmapFactory.decodeResource(getResources(),传入r.id)),也可以通过xml。


其次

1、测量大小(onmeasure(...))

不设定的话就默认全屏。

setMeasuerDimension(width,height);

ondraw(canvas)

创建一个画笔,为了避免什么,最好放到构造函数里面

canvas.drawBitmap(..... ),这个方法可以控制控件里面的图片到底在控件里面的哪里。所以在这里可以判断开关是开还是关来控制滑动。

2、设置响应开关事件,记得return true(这个的意思是消费),消费了用户的触摸事件才能消费其它事件。开关的话最好在toggle类重写ontouch事件。(switch(Event.getAction())ontouch还能顺便监看以下控件的大小呢~event.getX())

我们按下地那一刻,滑块便要重新drawbitmap一次,如何实现动态呢?这就需要记录它是否按下,如果是按下状态,就一直重新绘画按钮。

invalidate方法会导致ondraw方法,引发里面的变量重新生效,不用担心Ondraw写死了,界面会更新。

容易出现滑块正中间根本点不到,只能点击到左边。所以点击滑块,让它减去自身一半地位置。

3、设置滑块的限定范围,当它左上角的位置<0的时候强行让它=0,右边也是同理

4、判断开关:根据位置,和中点位置比较大小判断

//摆放(onlayout())这是viewgroup里面的方法,装修绘画(ondraw())

5、根据惯性,设置监听接口,监听开关。

其实就是在toggle类创建一个接口,接口里面有一个传入开关状态的方法。这个接口方便把状态传出去(可以设置一个小土司)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值