android简单的颜色选择器制作

来源:互联网 发布:windows文件监控 编辑:程序博客网 时间:2024/05/16 15:34

前两天需要开发一个蓝牙通信控制灯的颜色的项目,上网找了一个关于颜色选择器制作的帖子。

众所周知,android的控件只完成了基本的功能,对于像颜色选择的功能则需要自定义控件的使用。

网上的帖子主要都是自定义色环的使用,代码相对来说较为复杂,不利于初学者的掌握,因此,我就想是否可以通过android自带的seekbar控件完成一个颜色选择器的制作。

首先,普通的seekbar无法通过滑块来识别所选择的颜色,因此需要更换其背景图片(注意是process背景,网上有很多此类教程)。完成图如下所示:


那么如何通过滑块的位置来读出所选择的颜色(RGB)呢?

一个较为直观的方法是,通过bitmap的getpixel()方法以滑块所在位置的颜色值作为所选择的颜色。这样便需要将整幅屏幕截图,转换成bitmap对象,在将滑块的porcess转换成坐标。但是,我在这样做之后滑动滑块得到的颜色值是不变的,根据分析,是由于我的整个activity的layout背景是单色调的,读出的颜色是背景的颜色。

上面的方法走不通,那换第二种办法。

还是利用getpixel()方法(android有没有其他读取颜色的方法,还希望各路大神给予指导),将seekbar的view对象转换成bitmap对象,根据滑块的相对坐标来读取颜色,这样,果然读出了相应的ARGB的值,但是由于这样需要每次都将View对象转换为Bitmap对象,对于资源的消耗是巨大的(我在试的时候,连滑块滑动都有些卡顿了)。。。果不其然,一会就死机了。

那可不可以仅转换一次呢,最简单的办法自然就是吧背景色条转换成bitmap对象,载根据相对坐标值来获取颜色。

这种办法对资源的消耗果然很少!!!

· 最后。。。。好了。。。。

· 注意,读出的坐标值会是一个负的int值,这是由于java对数据补码的存储决定的,只要将之转换成十六进制就可以了。