⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 colorselector.java

📁 anyview手机小说阅览器的开源代码
💻 JAVA
字号:
package com.ismyway.anyview;

import javax.microedition.lcdui.*;

/**
 * <p>Title: AnyView</p>
 *
 * <p>Description: E680(I) Reader</p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: www.ismyway.com</p>
 *
 * @author ZhangJian
 * @version 1.0
 */
public class ColorSelector extends AbstractWindow {
    private int ANCHOR = Graphics.LEFT | Graphics.TOP;
    private String title = "拾色器 0.1";
    public final static int[] colors = {0X000000, 0X000033, 0X000066, 0X000099,
                                       0X0000CC, 0X0000FF, 0X003300, 0X003333,
                                       0X003366, 0X003399, 0X0033CC, 0X0033FF,
                                       0X006600, 0X006633, 0X006666, 0X006699,
                                       0X0066CC, 0X0066FF, 0X009900, 0X009933,
                                       0X009966, 0X009999, 0X0099CC, 0X0099FF,
                                       0X00CC00, 0X00CC33, 0X00CC66, 0X00CC99,
                                       0X00CCCC, 0X00CCFF, 0X00FF00, 0X00FF33,
                                       0X00FF66, 0X00FF99, 0X00FFCC, 0X00FFFF,
                                       0X330000, 0X330033, 0X330066, 0X330099,
                                       0X3300CC, 0X3300FF, 0X333300, 0X333333,
                                       0X333366, 0X333399, 0X3333CC, 0X3333FF,
                                       0X336600, 0X336633, 0X336666, 0X336699,
                                       0X3366CC, 0X3366FF, 0X339900, 0X339933,
                                       0X339966, 0X339999, 0X3399CC, 0X3399FF,
                                       0X33CC00, 0X33CC33, 0X33CC66, 0X33CC99,
                                       0X33CCCC, 0X33CCFF, 0X33FF00, 0X33FF33,
                                       0X33FF66, 0X33FF99, 0X33FFCC, 0X33FFFF,
                                       0X660000, 0X660033, 0X660066, 0X660099,
                                       0X6600CC, 0X6600FF, 0X663300, 0X663333,
                                       0X663366, 0X663399, 0X6633CC, 0X6633FF,
                                       0X666600, 0X666633, 0X666666, 0X666699,
                                       0X6666CC, 0X6666FF, 0X669900, 0X669933,
                                       0X669966, 0X669999, 0X6699CC, 0X6699FF,
                                       0X66CC00, 0X66CC33, 0X66CC66, 0X66CC99,
                                       0X66CCCC, 0X66CCFF, 0X66FF00, 0X66FF33,
                                       0X66FF66, 0X66FF99, 0X66FFCC, 0X66FFFF,
                                       0X990000, 0X990033, 0X990066, 0X990099,
                                       0X9900CC, 0X9900FF, 0X993300, 0X993333,
                                       0X993366, 0X993399, 0X9933CC, 0X9933FF,
                                       0X996600, 0X996633, 0X996666, 0X996699,
                                       0X9966CC, 0X9966FF, 0X999900, 0X999933,
                                       0X999966, 0X999999, 0X9999CC, 0X9999FF,
                                       0X99CC00, 0X99CC33, 0X99CC66, 0X99CC99,
                                       0X99CCCC, 0X99CCFF, 0X99FF00, 0X99FF33,
                                       0X99FF66, 0X99FF99, 0X99FFCC, 0X99FFFF,
                                       0XCC0000, 0XCC0033, 0XCC0066, 0XCC0099,
                                       0XCC00CC, 0XCC00FF, 0XCC3300, 0XCC3333,
                                       0XCC3366, 0XCC3399, 0XCC33CC, 0XCC33FF,
                                       0XCC6600, 0XCC6633, 0XCC6666, 0XCC6699,
                                       0XCC66CC, 0XCC66FF, 0XCC9900, 0XCC9933,
                                       0XCC9966, 0XCC9999, 0XCC99CC, 0XCC99FF,
                                       0XCCCC00, 0XCCCC33, 0XCCCC66, 0XCCCC99,
                                       0XCCCCCC, 0XCCCCFF, 0XCCFF00, 0XCCFF33,
                                       0XCCFF66, 0XCCFF99, 0XCCFFCC, 0XCCFFFF,
                                       0XFF0000, 0XFF0033, 0XFF0066, 0XFF0099,
                                       0XFF00CC, 0XFF00FF, 0XFF3300, 0XFF3333,
                                       0XFF3366, 0XFF3399, 0XFF33CC, 0XFF33FF,
                                       0XFF6600, 0XFF6633, 0XFF6666, 0XFF6699,
                                       0XFF66CC, 0XFF66FF, 0XFF9900, 0XFF9933,
                                       0XFF9966, 0XFF9999, 0XFF99CC, 0XFF99FF,
                                       0XFFCC00, 0XFFCC33, 0XFFCC66, 0XFFCC99,
                                       0XFFCCCC, 0XFFCCFF, 0XFFFF00, 0XFFFF33,
                                       0XFFFF66, 0XFFFF99, 0XFFFFCC, 0XFFFFFF};

    private Image colorSelector;
    private int itemIndex = 0;
    private int itemPages = 0;
    private int topIndex = 0;
    final static int ButtonHeight = 20; //滚动条需要空间的高
    private Image cube;
    private boolean pageup = false, pagedown = false; //记录用户点击触摸屏时的动作
    private int ShowItems = 15;

    final static int HorPad = 10;
    int VecPad = 25;
    final static int LinePad = 1;
    final static int CubeHeight = 15;

    public ColorSelector() {
        this( -1);
    }

    public ColorSelector(int defaultIndex) {
        WINDOW_STATE = OPENING;
        if (defaultIndex < 0 || defaultIndex > colors.length - 1) {
            itemIndex = 0;
            topIndex = 0;
        } else {
            itemIndex = defaultIndex;
            topIndex = itemIndex;
        }

        //确定当前窗口显示的条目
        if (AnyView.readType == 1) { //横屏
            ShowItems = (AnyView.ScreenWidth - HorPad - VecPad -
                         ButtonHeight) / (CubeHeight + LinePad);
        } else {
            ShowItems = (AnyView.ScreenHeight - HorPad - VecPad -
                         ButtonHeight) / (CubeHeight + LinePad);
        }

        //确定标题栏的高
        VecPad = AnyView.cf.FontHeight + 10;

        this.width = 135 + (HorPad << 1);
        this.height = ShowItems * (CubeHeight + LinePad) + VecPad + 10 +
                      ButtonHeight;
        if (AnyView.readType == 1) { //横屏
            this.LEFT = (AnyView.ScreenWidth - this.height) >> 1;
            this.TOP = (AnyView.ScreenHeight + this.width) >> 1;
        } else {
            this.LEFT = (AnyView.ScreenWidth - this.width) >> 1;
            this.TOP = (AnyView.ScreenHeight - this.height) >> 1;
        }
        this.LEFT = this.LEFT < 0 ? 0 : this.LEFT;
        this.TOP = this.TOP < 0 ? 0 : this.TOP;

        int[] c = new int[(width - 9) * CubeHeight];
        for (int i = 0; i < c.length; i++) {
            c[i] = 0x7FFFFFFF;
        }
        cube = Image.createRGBImage(c, (width - 9), CubeHeight, true);
        c = null;

        itemPages = colors.length / ShowItems;
        if (colors.length > ShowItems * itemPages) {
            itemPages++;
        }
        refreshList();
    }

    void refreshList() {
        Image img;
        colorSelector = Image.createImage(width, height);
        Graphics g = colorSelector.getGraphics();

        //绘制窗口背景
        g.setColor(AnyView.background);
        g.fillRect(0, 0, width, height);
        g.setColor(AnyView.bordorcolor);
        g.drawRect(0, 0, width - 1, height - 1);
        g.drawLine(0, VecPad, width, VecPad);

        //绘制窗口标题
        byte[] t = AnyView.cf.str2bytes(title);
        int w = t.length * AnyView.cf.AsciiWidth;
        int x = (width - w) >> 1;
        AnyView.cf.setColor(0);
        img = AnyView.cf.buildImage(title);
        g.drawImage(img, x, 5, ANCHOR);

        //绘制按钮
        g.setColor(AnyView.bordorcolor);
        g.drawLine(0, height - ButtonHeight, width, height - ButtonHeight);
        g.drawLine(width >> 1, height - ButtonHeight, width >> 1, height);
        g.drawLine(width - 5, VecPad + 1, width - 5, height - ButtonHeight);
        x = ((width >> 1) - 11) >> 1;
        int y = height - ButtonHeight + 7;
        g.drawImage(AnyView.UpArrow, x, y, ANCHOR);
        x += width >> 1;
        g.drawImage(AnyView.DownArrow, x, y, ANCHOR);

        int top = VecPad + 5;
        int offset = topIndex;
        for (int i = 0; i < ShowItems && offset < colors.length; i++) {
            g.setColor(colors[offset++]);
            g.fillRect(HorPad, top, width - (HorPad << 1), CubeHeight);
            top += CubeHeight + LinePad;
        }
    }


    protected Image getWindow() {
        Image img = Image.createImage(width, height);
        Graphics g = img.getGraphics();
        g.drawImage(colorSelector, 0, 0, ANCHOR);

        //绘制选择时背景
        int off = itemIndex - topIndex;
        int y = VecPad + off * (CubeHeight + LinePad) + 5;
        g.drawImage(cube, 2, y, ANCHOR);
        g.setStrokeStyle(Graphics.DOTTED);
        g.setColor(0xffffff);
        g.drawRoundRect(2, y, width - 9, CubeHeight, 8, 8);

        //绘制滚动条
        g.setStrokeStyle(Graphics.SOLID);
        g.setColor(AnyView.bordorcolor);
        int h = height - VecPad - ButtonHeight - 4;
        int x = itemIndex * h / colors.length;
        y = (itemIndex + ShowItems) * h / colors.length;
        g.drawLine(width - 3, VecPad + 2 + x, width - 3, VecPad + 2 + y);

        return img;
    }

    public int getSelectedIndex() {
        return itemIndex;
    }

    public void destroy() {
        colorSelector = null;
    }

    public boolean bof() {
        return (topIndex == 0);
    }

    public void keyUp() {
        itemIndex--;
        if (itemIndex < 0) {
            itemIndex = 0;
            return;
        }
        if (itemIndex < topIndex) {
            topIndex -= ShowItems;
            topIndex = topIndex < 0 ? 0 : topIndex;
            refreshList();
        }
    }

    public void keyDown() {
        itemIndex++;
        if (itemIndex == colors.length) { //已到达最后一项
            itemIndex = colors.length - 1;
            return;
        }

        if (itemIndex - topIndex == ShowItems) {
            topIndex++;
            refreshList();
        }

    }

    public void keyLeft() {
        if (bof()) {
            WINDOW_STATE = CLOSED;
            return;
        }

        if (topIndex == 0) { //向上翻页无效
            return;
        }
        topIndex -= ShowItems;
        topIndex = topIndex < 0 ? 0 : topIndex;
        itemIndex = topIndex;
        refreshList();
    }

    public void keyRight() {
        if (topIndex + ShowItems >= colors.length) { //翻页无效
            return;
        }
        topIndex += ShowItems;
        if (topIndex + ShowItems > colors.length) { //到顶了
            topIndex = colors.length - ShowItems;
        }
        itemIndex = topIndex;
        refreshList();

    }

    public void keyFire() {
        WINDOW_STATE = CLOSED;
    }

    protected void pointerPressed(int x, int y) {
        super.pointerPressed(x, y);

        if (!contains(PRESSED_X, PRESSED_Y)) {
            //WINDOW_STATE = CLOSED;
            return;
        }

        //首先检查是不是翻页
        pageup = false;
        pagedown = false;
        int top = height - ButtonHeight;
        if (PRESSED_Y > top && PRESSED_Y < height) { //在翻页按钮的Y轴范围内
            if (PRESSED_X > width >> 1) { //向下翻
                pagedown = true;
            } else if (PRESSED_X > 0) { //向上翻
                pageup = true;
            }
        }

        //判断用户当前的选择项
        int find = -1;
        for (int i = 0; i < ShowItems && find == -1; i++) {
            top = VecPad + i * (CubeHeight + LinePad) - 1;
            if (PRESSED_Y > top && PRESSED_Y < top + CubeHeight) {
                find = topIndex + i;
                itemIndex = topIndex + i;
                //System.out.println("pressed: itemIndex = " + itemIndex);
            }
        }
    }

    protected void pointerDragged(int x, int y) {

    }

    protected void pointerReleased(int x, int y) {
        TOUCH_EVENT = false;
        super.pointerReleased(x, y);

        if (!contains(RELEASE_X, RELEASE_Y) && !contains(PRESSED_X, PRESSED_Y)) {
            WINDOW_STATE = CLOSED;
            return;
        }

        //首先检查是不是翻页
        int top = height - ButtonHeight;
        if (RELEASE_Y > top && RELEASE_Y < height) { //在翻页按钮的Y轴范围内
            if (RELEASE_X > width >> 1) { //向下翻
                if (!pagedown) { //按下时的动作并不是向下翻页
                    return;
                }
                if (topIndex + ShowItems >= colors.length) { //翻页无效
                    return;
                }
                topIndex += ShowItems;
                if (topIndex + ShowItems > colors.length) { //到顶了
                    topIndex = colors.length - ShowItems;
                }
                itemIndex = topIndex;
                refreshList();
            } else if (RELEASE_X > 0) { //向上翻
                if (!pageup) { //按下时的动作并不是向上翻页
                    return;
                }
                if (topIndex == 0) { //向上翻页无效
                    return;
                }
                topIndex -= ShowItems;
                topIndex = topIndex < 0 ? 0 : topIndex;
                itemIndex = topIndex;
                refreshList();
            }
        }

        //判断用户当前的选择项
        int find = -1;
        for (int i = 0; i < ShowItems && find == -1; i++) {
            top = VecPad + i * (CubeHeight + LinePad) - 1;
            if (RELEASE_Y > top && RELEASE_Y < top + CubeHeight) {
                find = i + topIndex;
                //System.out.println("released: find = " + find);
            }
        }

        if (find == -1) {
            return;
        }

        if (find == itemIndex) { //用户确认选择功能
            TOUCH_EVENT = true;
            keyFire();
        }

        else {
            itemIndex = find;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -