Java ME » FAQ

Gradient

  • 2010-11-08 09:36
  • 0 komentarzy
  • 1193 odsłony
  • Oceń ten tekst jako pierwszy
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