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

📄 droppanel.java

📁 最强手机阅读器Anyview3.0版的界面代码
💻 JAVA
字号:
package com.ismyway.fairyui;

import javax.microedition.lcdui.Graphics;

import com.ismyway.anyview.others.Settings;
import com.ismyway.util.Theme;

public class DropPanel extends Panel {
	private DropList dl;
	private int maxItems = 3;
	private int topIndex = 0;
	private int currentIndex = 0;
	private int showItems = 3;
	private int itemHeight = 10;
	private int vert = 0;

	public DropPanel(DropList dl, int vert) {
		this.dl = dl;
		this.vert = vert;
		itemHeight = getFont().getHeight() + 2;
	}

	public void paint(Graphics g, int adjustx, int adjusty) {
		g.setColor(0xFFFFFF);
		g.fillRect(getLeft() - adjustx, getTop() - adjusty, getWidth(), getHeight());
		g.setColor(0);
		g.drawRect(getLeft() - adjustx, getTop() - adjusty, getWidth(), getHeight());

		for (int i = 0; i < showItems; i++) {
			paintItem(g, i + topIndex, adjustx, adjusty);
		}

		if (dl.getItems().size() > maxItems) {
			int left = getLeft() - adjustx;
			int top = getTop() - adjusty;
			int tx, ty;
			if (topIndex != 0) { //上箭头
				tx = left + getWidth() - 3;
				ty = top + 2;
				if (currentIndex == topIndex) {
					Theme.drawArrow(g, Theme.Arrow, tx - 7, ty, Theme.UP);
				} else {
					Theme.drawArrow(g, Theme.ArrowShade, tx - 7, ty, Theme.UP);
				}
			}
			if (topIndex != dl.getItems().size() - maxItems) {
				tx = left + getWidth() - 3;
				ty = top + getHeight() - 3;
				if (topIndex + maxItems == currentIndex + 1) {
					Theme.drawArrow(g, Theme.Arrow, tx - 7, ty - 4, Theme.DOWN);
				} else {
					Theme.drawArrow(g, Theme.ArrowShade, tx - 7, ty - 4, Theme.DOWN);
				}
			}
		}
	}

	private void paintItem(Graphics g, int itemindex, int adjustx, int adjusty) {
		int left = getLeft() - adjustx;
		int top = getTop() + itemHeight * (itemindex - topIndex) - adjusty;
		String title = (String) dl.getItems().get(itemindex);
		g.setFont(getFont());
		if (itemindex == currentIndex) {
			Theme.drawSelectedBackground(g, left + 1, top + 1, getWidth() - 1, itemHeight - 1);
			g.setColor(Theme.TextShade);
			g.drawString(title, left + 3, top + 1, ANCHOR);
			g.setColor(Theme.TextLight);
			g.drawString(title, left + 2, top, ANCHOR);
		} else {
			g.setColor(Theme.TextColor);
			g.drawString(title, left + 2, top, ANCHOR);
		}
	}

	public void show() {
		//System.out.println(dl.getTop() + ", " + verticalOffset + ", " + dl.getHeight());
		if (dl.getTop() - vert + dl.getHeight() > mainCanvas.getHeight() / 2) {
			mainCanvas.showPopup(this, Settings.ANIMATE_UP);
		} else {
			mainCanvas.showPopup(this, Settings.ANIMATE_DOWN);
		}
	}

	public void validate() {
		if (dl.getTop() - vert + dl.getHeight() > mainCanvas.getHeight() / 2) { //向上弹出
			maxItems = (dl.getTop() - vert) / itemHeight;
		} else { //向下弹出
			maxItems = (mainCanvas.getHeight() - dl.getTop() - dl.getHeight() + vert) / itemHeight;
		}

		//System.out.println(dl.getTop() + ", " + verticalOffset + ", " + dl.getHeight());

		if (dl.getItems().size() < maxItems) {
			setHeight(dl.getItems().size() * itemHeight);
			showItems = dl.getItems().size();
		} else {
			setHeight(maxItems * itemHeight);
			showItems = maxItems;
		}

		setWidth(dl.getWidth());
		setLeft(dl.getLeft());

		if (dl.getTop() - vert + dl.getHeight() > mainCanvas.getHeight() / 2) {
			setTop(dl.getTop() - vert - getHeight() - 1);
			//System.out.println("向上 = " + (dl.getTop() - vert - getHeight() - 1));
		} else {
			setTop(dl.getTop() + dl.getHeight() - vert);
			//System.out.println("向下 = " + (dl.getTop() + dl.getHeight() - vert));
		}

		currentIndex = dl.getSelectedIndex();
		topIndex = currentIndex;
		if (topIndex + showItems > dl.getItems().size()) {
			topIndex = dl.getItems().size() - showItems;
		}
		topIndex = topIndex < 0 ? 0 : topIndex;
	}

	public boolean keyReleased(int keyCode) {
		keyCode = Settings.mapKey(keyCode);

		if (keyCode == Settings.VKEY_UP || keyCode == Settings.VKEY_NUM2) { //上
			currentIndex--;
			if (currentIndex < 0) {
				currentIndex = dl.getItems().size() - 1;
				topIndex = dl.getItems().size() - showItems;
			}
			if (currentIndex < topIndex) {
				topIndex = currentIndex;
			}
			return true;
		} else if (keyCode == Settings.VKEY_DOWN || keyCode == Settings.VKEY_NUM8) { //下
			currentIndex++;
			if (currentIndex > dl.getItems().size() - 1) {
				currentIndex = topIndex = 0;
			}
			if (currentIndex > topIndex + showItems - 1) {
				topIndex = currentIndex - showItems + 1;
			}
			return true;
		} else if (keyCode == Settings.VKEY_FIRE || keyCode == Settings.VKEY_NUM5) {
			dl.setSelectedIndex(currentIndex);
			mainCanvas.closePopup();
			dl.itemStateChange();
		} else if (keyCode == Settings.VKEY_LEFT || keyCode == Settings.VKEY_NUM4) {
			mainCanvas.closePopup();
			return true;
		} else if (keyCode == Settings.VKEY_RIGHT || keyCode == Settings.VKEY_NUM6) {

		} else if (keyCode == Settings.VKEY_LSOFT || keyCode == Settings.VKEY_STAR) {
			dl.setSelectedIndex(currentIndex);
			mainCanvas.closePopup();
			dl.itemStateChange();
		} else if (keyCode == Settings.VKEY_RSOFT || keyCode == Settings.VKEY_POUND) {
			mainCanvas.closePopup();
			return true;
		}
		return true;
	}

	public boolean pointerPressed(int x, int y) {
		lastPointerX = x;
		lastPointerY = y;
		if (x > getLeft() && x < getLeft() + getWidth() && y > getTop() && y < getTop() + getHeight()) {
			currentIndex = (y - getTop()) / getFont().getHeight() + topIndex;
			return true;
		}
		return false;
	}

	public boolean pointerReleased(int x, int y) {
		if (lastPointerX > getLeft() && lastPointerX < getLeft() + getWidth() && lastPointerY > getTop()
				&& lastPointerY < getTop() + getHeight()) {
			if (x > getLeft() && x < getLeft() + getWidth() && y > getTop() && y < getTop() + getHeight()) {
				int index = (y - getTop()) / getFont().getHeight() + topIndex;
				if (index == currentIndex) {
					return keyReleased(Settings.VKEY_FIRE);
				} else {
					currentIndex = index;
					return true;
				}
			}
			return false;
		} else {
			if (x > getLeft() && x < getLeft() + getWidth() && y > getTop() && y < getTop() + getHeight()) {
				currentIndex = (y - getTop()) / getFont().getHeight() + topIndex;
				return true;
			} else {
				mainCanvas.closePopup();
				return true;
			}
		}
	}
}

⌨️ 快捷键说明

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