3G视线 -- 专注手机软件开发
原文出处
http://www.3geye.net/?uid-3-action-viewspace-itemid-111
对于自定义UI的设计,涉及到的工作量是很大的,有时候往往要实现一种UI效果而花费大量的时间去思考,找路子,然后实践,运气好的话,自然OK,运气不好,那就很惨了。浪费时间,还没有效果。
不过还好有很多前辈总结出了一些方法跟代码,下面就让我们来看下,
颜色渐变效果的实现吧。实践了这么,感觉就这个代码比较好,颜色渐变的比较平滑。很舒服。
下面是效果图
下面是实现代码,大家可以参考下,也许还有更优化的设计呢。
下面代码也是从Intenet来的,只是修改了下。
/**
* 绘制渐变色选择条
* @param g
* @param color
* @param x
* @param y
* @param width
* @param height
*/
public final static void drawShadeRect(Graphics g, int color, int x , int y, int width, int height){
int[] rgb = getShadeColor(color, width);
for (int by = y; by < y + 20; by += 4)
{
int nTemp = y + 20 - (by - y);
nTemp = nTemp>4 ? 4:nTemp;
g.drawRGB(rgb, 0, width, x, by, width,
nTemp, true);
}
}
/**
* 获取颜色渐变RGB数组,
* 为了获取这个数据,而又跟CLDC1.0兼容,导致项目增加了一个Float类
* 导致程序变大
* @param width
* @return
*/
public final static int[] getShadeColor(int color , int width){
int[] rgb;
int shadeWidth = width;
int nRgbData = shadeWidth * 4;
rgb = new int[nRgbData];
int alpha = -127;
for (int i = 0; i < shadeWidth; i++)
{
alpha = -127 + i;
//主要算法在这里。
int col = color | (128 - alpha << 24);
rgb[i] = col;
rgb[i + shadeWidth ] = col;
rgb[i + shadeWidth * 2] = col;
rgb[i + shadeWidth * 3] = col;
}
return rgb;
}
就两个静态方法很简单的。哈