注册 登录
菊子曰官方网站 返回首页

苌蓊芪的菊子园 http://sns.juziyue.com/?34 [收藏] [复制] [分享] [RSS]

日志

Android中颜色相关类的使用体会

热度 1已有 1019 次阅读2012-5-23 22:23 | android, android技术, 编程

分享到:
免费下载菊子曰

       上一次写博客已经是3月初的事情了,这2个多月来,除了毕业论文的忙碌之外,还由于对博客的兴趣不高,所以始终没写过只言片语。今天,论文答辩前的最后狂欢,就这几个月对android.graphics.Color类的使用体会进行小小的总结。

       今年2月,第一次接触到android的开发,我被分配到的第一个工作是制造一个dialog,功能是颜色的选择,就如windows自带画图工具中的颜色选择dialog那样(界面,功能一模一样)。而这一做可谓是一发不可收拾,之后无论是二阶色、渐变效果,或者其他,凡是和颜色有关的组件全都集中到了我的手中。也正因如此,在这段日子的使用中,我对Color类产生了一些小体会,在这作为我android系列的第一篇日志,日后希望能够有机会不断更新我在android开发中的体会。

      根据android的API介绍,我们可知:Color类定义了一些创建和转换颜色int值的方法。android中的Color由4个元素组成:alpha(透明度)、red、green、blue(这三个是我们熟知的三原色)。Color类中的方法使用起来普遍非常之简单,所以没有进行详细介绍用法的必要,我在这里只想说说我对这个类的一些想法。在我对Color类的使用过程中,我一共遇到了2个不舒服的地方:

1.

static int alpha(int color)
Return the alpha component of a color int.

       在Color类中,有一个alpha(int color)的方法,利用这个方法,我们可以通过一个颜色的Int值来算出他的透明度(取值介于0..255),但是,在我的实践中,发现一个问题,这个方法的有效性似乎只限于由Color类创造出来的颜色。在我们的项目中,前人自定义了一个类,它与Color类的不同点在于透明度的取值范围是0..100的百分比,然后利用这个百分数与固体色进行换算出带有透明效果的真实颜色,虽然通过这个方法算出来的颜色能够被android识别,并能正确的现实出来,但是当我希望能够通过alpha(int color)方法重新得出它的透明度时,问题就出来了。虽然颜色能够被识别,但是由于该颜色并非由Color类创建,我通过alpha(int color)方法得到的alpha值永远都是固体色的255。

       我只是个android菜鸟,也没看过android里面的源码(包括sdk的),所以对为什么会出现这种情况不得而知。不过幸好,对于纯正的android开发来说,一般不会像我所遇到的使用自定义的计算方式来得到真实颜色的(由于我做的是移植工作,所以对于原项目中提供的类和方法,我不得不优先采用,即使sdk中已经有了相同功能的类库)。

2.

static int argb(int alpha, int red, int green, int blue)
Return a color-int from alpha, red, green, blue components.

    在我的项目中,还有一个颜色选择功能是上述功能的简版,即在默认提供的8个固体色中选择需要使用的颜色,并在文本框中设置百分比透明度,然后内部进行计算得出真实颜色。原先我预备使用的是Color类自有的方法,也就是argb(int alpha,int red,int green,int blue)来得到真实颜色,但是在使用过程中,我发现这一方法的使用体验很差,由于该方法是通过传入四个必备元素进行计算,我不得不再通过Color类提供的另外3个类来获得选中颜色的三原色数值,然后再重新算出真实颜色。

static int blue(int color)
Return the blue component of a color int.
static int green(int color)
Return the green component of a color int.
static int red(int color)
Return the red component of a color int.

       虽然这种操作在使用阶段问题并不大,性能的损耗也有限,但是对于写代码的人来说,却是很难受的。通常来说,我们有2种选择,1是定义3个临时变量来接三原色,然后连同alpha一同传入argb()方法,另一种是不显式定义临时变量,在使用argb方法时,在三原色的位置使用三原色的计算方法替代。无论是哪一种,都让代码的阅读产生不悦感。不知道为什么Color类为什么不直接提供个将alpha值和固体色Int值进行计算的方法呢?

      不过幸好,类似的功能在android.graphics.drawable.ColorDrawable中也有提供,而且相对比较简单。我们所需要做的是构造一个ColorDrawable类,带参不带参皆可,然后使用setColor()方法把颜色设置进去,再使用setAlpha()将alpha通道的值设进去。这样我们就可以得到一个加入了alpha值的颜色,在使用时,我们可以直接把ColorDrawable设置到paint里面去,也可以利用getColor()获得颜色的int值并加以使用。

       关于Color类的使用体会就谈到这了,对于编程技术文章来说,没有贴代码、没有截图辅佐应该算是不合格的吧?不过,正如我开篇所说,这篇日志的目的并非介绍技术,只是使用体会的存档,分享。望见谅!

免费下载菊子曰

路过

鸡蛋
1

鲜花

握手

雷人

愤怒

悲哀

刚表态过的朋友 (1 人)

发表评论 评论 (1 个评论)

回复 洪甲洲 2012-5-24 13:48
学习了  

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

关闭

站长推荐

再见了,菊子曰的朋友们
再见了,菊子曰的朋友们
由于经营不善,我们决定解散菊子曰开发团队,并且从即日起不再更新菊子曰了

查看 »

菊子曰 ( 闽ICP备12013319号 )

GMT+8, 2019-1-16 10:39 , Processed in 0.015224 second(s), 9 queries , Apc On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部