自定义控件之SeekBar —— 我点灯 XSeekBar

来源:互联网 发布:中国核弹头数量 知乎 编辑:程序博客网 时间:2024/06/05 14:55

大家应该都知道Android系统自带的Seekbar控件,虽然用起来很简单方便,但是它会随着客户端Android版本的不同而发生改变,这就会造成UI界面风格不同一,从而导致用户体验下降。

后来我在网上找了很多自定义SeekBar的方法,希望能够实现在不同的Android版本中统一画风。

我找到的方法大多都是通过自定义一个Style文件来进行大量配置,而且还需要.9图片的支持,恕我直言,我特么最烦的就是敲代码敲到一半居然要开启PS再画个图!!!

而且有过类似经历的小伙伴们应该知道,自己作图的时候还得考虑图片尺寸色彩等因素,导致开发效率降低(不单单是效率,简直是特么心情都不好了啊)。于是我决定自己做一个纯代代码控制的自定义控件,来减掉手动绘图的过程。这就是XSeekBar


先来一张效果图


从图上小伙伴们就可以看出来了吧。。。XSeekBar不但可以控制进度条的色彩、粗细、大小还可以用作垂直和水平两种方式。。。


使用方法:

直接在xml的配置文件中使用该控件即可,而且我还通过设置了自定义xml配置属性来实现XSeekBar的多样性。


例如上图中的app:xs_MaxColor ,这就是一个配置进度条颜色的属性。Max这一段的粗细和色彩是通过xs_MaxHeight和xs_MaxColor来设置的,Progress那一段也是同理



可能有的小伙伴会问啦,为什么你每个属性名前面还得加个xs的前缀呢,其实。。。这不关我事啊,我也是被逼的,在工程目录下的Value/attrs.xml文件中配置自定义的xml属性,是不能重名的,就算不是同一个控件也不行,所以我就给它们都加上了前缀。



接下来我逐个的介绍一下这些属性是干嘛用的。。。

xs_radius用来设置控制球的半径


xs_ProgressHeight 和 xs_MaxHeight类似,它们用来控制进度条的粗细(用了height做名字是因为当时没有考虑到垂直XSeekBar的情况)


xs_BCircleColor 和 xs_SCircleColor分别用来设置控制球中两个圆的色彩(B表示Big,S表示Small,英语渣渣的我表示词汇量就这样了)




xs_Progress 和 xs_Max应该就不用多说了吧,它们和普通的SeekBar中得Progress和Max一样。。。

需要再说一下的是xs_orientation,它有两个值可选。。。Vertical和Horizontal,顾名思义,它是用来设置XSeekBar是以水平方式工作,还是垂直方式工作的。


另外设置这些属性通过java代码同样可以设置,大概就都是像下图这样的设置方式了,这里就不再赘述了。。。



还有一个比较重要的地方,就是监听回调,在Activity中(或者随便一个你能用得上的类中)实现OnXSeekBarListener接口,

这个接口只有一个回调方法

onProgressChange(XSeekBar xSeekBar, int progress, boolean isUser);

第一个参数是控件自身,第二个参数是当前的Progress值,第三个参数用来表示是否因为用户控制导致progress值发生了变化,如果为true表示是用户控制的,如果false就说明是内部代码(setProgress方法)控制导致progress变化



http://download.csdn.net/detail/w366549434/9746140

这个链接是源代码。。。其中的java直接塞到你自己的项目里又能用了,里面的另一个xml文件需要放到Value/attrs.xml这里(如果你本身的项目中有用到attrs.xml文件,那么只需要把我的那一部分copy过去就好了)



0 0
原创粉丝点击