原文出處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;
}
就兩個靜態方法很簡單的。哈