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

📄 row.java

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

import javax.microedition.lcdui.Graphics;

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


/**
 * ROW中只能包含DisplayableBlock元素,添加规则如下:
 * 每个DisplayableBlock与左/右边距及其它DisplayableBlock的间距由ROW来控制
 * 即使DisplayableBlock没有处理边距,也保证DisplayableBlock不会太挤
 * 对于DisplayableBlock来说,自己可以适当处理边距,但并不强求
 * @author leftmoon
 *
 */
public class Row extends Component {
	protected int filledColor = Theme.Background;

	public Row() {

	}

	public void add(DisplayableBlock dis) {
		dis.setParent(this);
		components.add(dis);
	}

	public boolean keyReleased(int key) {
		return false;
	}

	public boolean keyRepeated(int key) {
		return false;
	}

	public void paint(Graphics g, int adjustx, int adjusty) {
		g.setColor(filledColor);
		g.fillRect(getInnerLeft() - adjustx, getInnerTop() - adjusty, getWidth(), getHeight());

		//int start = findSuitableRow(getTop() + adjusty);
		//		if (start != 0) {
		//			System.out.println("start = " + start);
		//		}

		for (int i = 0; i < components.size(); i++) {
			DisplayableBlock c = (DisplayableBlock) components.get(i);
			if (c.getTop() + c.getHeight() < getContentPanel().getTop() + adjusty) {
				continue;
			}
			if (c.getTop() > getContentPanel().getTop() + getContentPanel().getHeight() + adjusty) {
				break;
			}

			//			System.out.println("[" + i + "]" + c.getClass().getName() + " paint................");
			//			if (c.getTop() - adjusty > panelHeight) {
			//				//System.out.println("row返回:" + i);
			//				return;
			//			}
			c.paint(g, adjustx, adjusty);
		}

		if (border) {
			g.setColor(Theme.TextColor);
			g.setStrokeStyle(borderStyle);
			g.drawRect(getInnerLeft() - adjustx, getInnerTop() - adjusty, getWidth(), getHeight());
		}
	}

	//	public int findSuitableRow(int height) { //二分法查找
	//		int index = 0; //相当于指针的东西
	//		int iStart = 0; //
	//		int iEnd = components.size() - 1;
	//		while (true) {
	//			index = (iStart + iEnd) / 2;
	//			Component row = (Component) components.elementAt(index);
	//			if (row.getTop() + row.getHeight() < height) {
	//				iStart = index;
	//			} else if (row.getTop() > height + container.viewportHeight) {
	//				iEnd = index;
	//			} else {
	//				break;
	//			}
	//		}
	//		return index;
	//	}

	public boolean pointerEvent(int x, int y) {
		return false;
	}

	/**
	 *XXX 所有的row都不需要也不允许自己设置宽,由panel来指定row的宽度
	 */
	public void validate() {
		//int left = Settings.VECPADDING;
		int width = getWidth() - Settings.VECPADDING * 2;
		int bottom = 0;
		int[] rect = { Settings.VECPADDING, 0, getWidth() - Settings.VECPADDING * 2, 1 };
		int maxBottom = 0;

		for (int i = 0; i < components.size(); i++) {
			DisplayableBlock c = (DisplayableBlock) components.get(i);
			c.putInSequence(rect, width);
			bottom = rect[1] + rect[3];
			if (maxBottom < bottom) {
				maxBottom = bottom;
			}
			rect[0] += Settings.VECPADDING;
			rect[2] -= Settings.VECPADDING;
			//			System.out.println("rect[0] = " + rect[0] + ", rect[1] = " + rect[1] + ", rect[2] = "
			//					+ rect[2] + ", rect[3] = " + rect[3]);
			//			if (debug) {
			//				System.out.println("[" + i + "]" + c.getTop() + "................");
			//			}
		}
		setHeight(maxBottom);
	}

	public boolean isTraversable() {
		for (int i = 0; i < components.size(); i++) {
			DisplayableBlock c = (DisplayableBlock) components.get(i);
			if (c.isTraversable()) {
				return true;
			}
		}
		return false;
	}

	public void resetPointer(ArrayList hotpots) {
		for (int i = 0; i < components.size(); i++) {
			DisplayableBlock c = (DisplayableBlock) components.get(i);
			if (c.isTraversable()) {
				hotpots.add(c);
			}
		}
	}

	public int getFilledColor() {
		return filledColor;
	}

	public void setFilledColor(int filledColor) {
		this.filledColor = filledColor;
	}

	public boolean isAnimated(int viewportHeight, int panelHeight) {
		for (int i = 0; i < components.size(); i++) {
			DisplayableBlock disp = (DisplayableBlock) components.get(i);
			if (disp.getTop() + disp.getHeight() < viewportHeight) {
				continue;
			}
			if (disp.getTop() > viewportHeight + panelHeight) {
				break;
			}
			if (disp.isAnimated()) {
				return true;
			}
		}
		return false;
	}

	public boolean clock(int viewportHeight, int panelHeight) {
		boolean repaint = false;
		for (int i = 0; i < components.size(); i++) {
			DisplayableBlock disp = (DisplayableBlock) components.get(i);
			if (disp.getTop() + disp.getHeight() < viewportHeight) {
				continue;
			}
			if (disp.getTop() > viewportHeight + panelHeight) {
				break;
			}
			repaint |= disp.clock();
		}
		return repaint;
	}

	public void clear() {
		synchronized (components) {
			components.clear();
		}		
	}

	public boolean isPointerIn(int x, int y) {
		return false;
	}

	public boolean pointerDragged(int x, int y) {
		return false;
	}

	public boolean pointerReleased(int x, int y) {
		return false;
	}
}

⌨️ 快捷键说明

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