[转]程序实现颜色渐变(j2me+android)

程序实现绘制渐变颜色大体思想就是用渐变的颜色值平铺,通常考虑上速度和性能就要分两种了:

一:按块平铺,就是通常的设置一个块绘制好了在绘制另一个块(这的块大于一个像素哟,不然就没必要分了)

二:按像素区域填充RGB值,

优缺点:第一种优点:速度快、占用内存少、支持机型多便于移植,缺点:效果不是最理想的

             第二种优点:效果很好渐变过渡平滑,缺点:速度慢、占用内存大、不方便移植

但在小型设备商我们一般都要考虑内存和速度,所以我们需要实际考虑;在这我只作出第一种的源码和实现方式:如下:

一:Android实现:

private void DrawList(Paint paint,Canvas canvas,int x,int y, int w,int h, int colorBegin,int colorEnd) {

//具体实现就不用多说了,大致就是把RGB各个颜色值进行加减运算,然后组合成一种RGB颜色值,这个方法是我封装好的现成的
   int r0 = (colorBegin >> 16) & 0xff;
   int r1 = (colorEnd >> 16) & 0xff;
   int g0 = (colorBegin >> 8)& 0xff;
   int g1 = (colorEnd >> 8) & 0xff;
   int b0 = (colorBegin) & 0xff;
   int b1 = (colorEnd) & 0xff;
   int F,r,g,b;
   for(int i =0;i<h;++i){
    F = (i << 16)/h;
    r = r0 +((F * (r1-r0)) >> 16);
    g = g0 +((F * (g1-g0)) >> 16);
    b = b0 +((F * (b1-b0)) >> 16);
    paint.setARGB(0xff, r, g, b);
    canvas.drawRect(x, y+i, 320,y+i+1, paint);
   }
}

二:j2me实现:原理都是第一种

/**绘制渐变颜色函数
* @param graphics 画笔
* @param x 绘制起始位置x坐标
* @param y 绘制起始位置y坐标
* @param w 绘制列表的宽度
* @param h 绘制列表的高度
* @param colorBegin 列表填充起始位置颜色
* @param colorEnd 列表填充结束位置颜色
*/
public void DrawList(Graphics graphics,int x,int y, int w,int h, int colorBegin,int colorEnd) {
   if(colorBegin == colorEnd){
    graphics.setColor(colorBegin);
    graphics.fillRect(x, y, w, h);
   }else{
    int r0 = (colorBegin >> 16) & 0xff;
    int r1 = (colorEnd >> 16) & 0xff;
    int g0 = (colorBegin >> 8)& 0xff;
    int g1 = (colorEnd >> 8) & 0xff;
    int b0 = (colorBegin) & 0xff;
    int b1 = (colorEnd) & 0xff;
    int F,r,g,b;
    for(int i =0;i<h;++i){
     F = (i << 16)/h;
     r = r0 +((F * (r1-r0)) >> 16);
     g = g0 +((F * (g1-g0)) >> 16);
     b = b0 +((F * (b1-b0)) >> 16);
     graphics.setColor(r<<16|g<<8|b);
     graphics.drawRect(x, y+i, w, 1);
    }
   }
}

当然这只是列出上下的渐变,关于圆渐变、侧方向渐变当然也可以用同样的方式来实现的,但是如果很复杂的渐变我觉得你还是用效果图来得直接(如果你是一个程序员就应该用代码试试这些)。

 

posted @ 2015-08-26 13:36  tonny.lee  阅读(168)  评论(0)    收藏  举报