Java Java ME FAQ

Gradient

WeeR

Poniżej prezentuje klasę umożliwiającą rysowanie gradienta poziomo lub pionowo:

import javax.microedition.lcdui.Graphics;
 
public class Gradient
{
    public static final int VERTICAL = 0;
    public static final int HORIZONTAL = 1;
 
    public static void gradientBox(Graphics g, int color1, int color2, int left, int top, int width, int height, int orientation)
    {
        int max = orientation == VERTICAL ? height : width;
 
        for(int i = 0; i < max; i++)
        {
            int color = midColor(color1, color2, max * (max - 1 - i) / (max - 1), max);
 
            g.setColor(color);
 
            if(orientation == VERTICAL)
                g.drawLine(left, top + i, left + width - 1, top + i);
            else
                g.drawLine(left + i, top, left + i, top + height - 1);
        }
    }
 
    static int midColor(int color1, int color2, int prop, int max)
    {
        int red =
            (((color1 >> 16) & 0xff) * prop +
            ((color2 >> 16) & 0xff) * (max - prop)) / max;
 
        int green =
            (((color1 >> 8) & 0xff) * prop +
            ((color2 >> 8) & 0xff) * (max - prop)) / max;
 
        int blue =
            (((color1 >> 0) & 0xff) * prop +
            ((color2 >> 0) & 0xff) * (max - prop)) / max;
 
        int color = red << 16 | green << 8 | blue;
 
        return color;
    }
 
    public static int ScrollUp (int O_ILE, int aktualna_wartosc, int KoniecTekstu, int Limit) {
        int Scroll = aktualna_wartosc;
        int i = 0;
        // jezeli nie osiagnieto limitu w przesuwaniu, to mozna przesunac w gore tekst
 
        for (i = 0; i<O_ILE; i++) {
            if (Scroll < Limit) {
                Scroll = Scroll + 10;
            }
        }
 
        return Scroll;
    }
 
    public static int ScrollDown (int O_ILE, int aktualna_wartosc, int KoniecTekstu, int Limit) {
        int Scroll = aktualna_wartosc;
        int i = 0;
 
        for (i = 0; i<O_ILE; i++) {
            if (KoniecTekstu < Limit) {} else {
                Scroll = Scroll - 10;
            }
        }
        return Scroll;
    }
}

Przykładowe użycie :

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
 
public class GradientRectCanvas extends Canvas { 
    protected void paint(Graphics g)
    {
        int halfWidth = getWidth() / 2;
        int halfHeight = getHeight() / 2;
 
        Gradient.gradientBox(g, 0xffffff, 0xff0000, 0, 0, halfWidth, halfHeight, Gradient.HORIZONTAL); 
        Gradient.gradientBox(g, 0xff0000, 0xffffff, halfWidth, 0, halfWidth, halfHeight, Gradient.VERTICAL); 
        Gradient.gradientBox(g, 0xffff00, 0x00ffff, 0, halfHeight, halfWidth, halfHeight, Gradient.VERTICAL); 
        Gradient.gradientBox(g, 0x00ff00, 0x0000ff, halfWidth, halfHeight, halfWidth, halfHeight, Gradient.VERTICAL);
    } 
}

Funkcja zaczerpnięta z forum nokii
http://wiki.forum.nokia.com/index.php/Draw_Gradient_in_Java_ME

FAQ

0 komentarzy