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

📄 midp2layoutview.java

📁 j2me polish学习的经典代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                    case Item.LAYOUT_CENTER :
                        x = (remainingWidth >> 1);
                        break;

                    case Item.LAYOUT_RIGHT :
                        x = remainingWidth;
                        break;
                }

                for (int i = 0; i < this.currentRow.size(); i++) {
	                rowItem = (RowItem) this.currentRow.get(i);
	                rowItem.x = x;
	                x += rowItem.width + this.paddingHorizontal; // Next Item
	
	                /**
	                 * Vertical Layout starts here
	                 */
	                int layout = rowItem.item.getLayout();
	                rowItem.y = this.contentHeight;
	                if (Item.LAYOUT_VEXPAND == (layout & Item.LAYOUT_VEXPAND)) {
                        // Vertical expansion is required, ignore all other
                        rowItem.height = this.rowHeight;
	                } else {
                        layout = (layout & LAYOUT_VERTICAL);
                        switch (layout) {
	                        case Item.LAYOUT_VCENTER :
	                            rowItem.y += ((this.rowHeight - rowItem.height) >> 1);
	                            break;
                            case Item.LAYOUT_BOTTOM :
                                rowItem.y += this.rowHeight - rowItem.height;
                                break;
                        }
	                }
                }

                if (this.allRows.size() == 0) {
	                // Adding first row
	                this.contentHeight += this.rowHeight;
                } else {
                    this.contentHeight += this.paddingVertical + this.rowHeight;
                }
                if ( this.rowWidth > this.contentWidth ) {
	                this.contentWidth = this.rowWidth;
                }

                // Get ready for next row
                this.allRows.add(this.currentRow);
                this.rowHeight = this.rowWidth = 0;
                this.currentRow = new ArrayList();
        }

        /*
         * (non-Javadoc)
         * 
         * @see de.enough.polish.ui.ContainerView#paintContent(int, int, int, int,
         *      javax.microedition.lcdui.Graphics)
         */
        protected void paintContent(int x, int y, int leftBorder, int rightBorder,
                        Graphics g) 
        {
                for (int i = 0; i < this.allRows.size(); i++) {
                        ArrayList row = (ArrayList) this.allRows.get(i);
                        for (int j = 0; j < row.size(); j++) {
                                RowItem rowItem = (RowItem) row.get(j);
                                int xItem = x + rowItem.x;
                                rowItem.item.paint(xItem, 
                                		y + rowItem.y, 
										Math.max(leftBorder, xItem), 
										Math.min(rightBorder, xItem + rowItem.width), 
										g );
                        }
                }
        }
        /*
         * (non-Javadoc)
         * 
         * @see de.enough.polish.ui.ContainerView#getNextItem(int, int)
         */
        protected Item getNextItem(int keyCode, int gameAction) {
                if (this.allRows.size() == 0)
                        return null;
                Item[] items = this.parentContainer.getItems();
                if (this.focusedIndex >= items.length) {
                        for(int i=0; i < items.length; i++) {
                                if(items[i].appearanceMode != Item.PLAIN) {
                                        focusItem(i, items[i]);
                                        return items[i];
                                }
                        }
                }

                // Find out where the current focused item is.
                Item focusedItem = items[this.focusedIndex];
                int rowIndex = 0;
                //int colIndex = 0;
                int xOffset = 0;
                for (int i = 0; i < this.allRows.size(); i++) {
                        ArrayList row = (ArrayList) this.allRows.get(i);
                        for (int j = 0; j < row.size(); j++) {
                                RowItem rowItem = (RowItem) row.get(j);
                                if (rowItem.item == focusedItem) {
                                        rowIndex = i;
                                        //colIndex = j;
                                        xOffset = rowItem.x + (rowItem.width >> 1);
                                        i = 10000;
                                        break;
                                }
                        }
                }

                Item item = null;
                if (gameAction == Canvas.UP && keyCode != Canvas.KEY_NUM2) {
                        // Going Up
                        if (this.horizontalOffset == -1) {
                        	this.horizontalOffset = xOffset;
                        }
                        while (rowIndex > 0) {
                                rowIndex--;
                                item = getItemByHorizontalOffset((ArrayList) this.allRows
                                                .get(rowIndex), this.horizontalOffset);
                                if(item != null) break;
                        }
                        if(item == null){
                                // Can't go up any more
                        }

                } else if (gameAction == Canvas.DOWN && keyCode != Canvas.KEY_NUM8) {
                        // Going Down
                        if (this.horizontalOffset == -1) {
                        	this.horizontalOffset = xOffset;
                        }
                        
                        while(rowIndex < (this.allRows.size() - 1)) {
                                rowIndex++;
                                item = getItemByHorizontalOffset((ArrayList) this.allRows
                                                .get(rowIndex), this.horizontalOffset);
                                if(item != null) break;
                        } 
                        
                        if(item == null){
                                // Can't go Down any more
                        }

                } else if (gameAction == Canvas.RIGHT && keyCode != Canvas.KEY_NUM6) {
                        // Going Right
                	this.horizontalOffset = -1; // Reset vertical movement position
                        item = getNextFocusableItem(items, true, 1, false);

                } else if (gameAction == Canvas.LEFT && keyCode != Canvas.KEY_NUM4) {
                        // Going Left
                		this.horizontalOffset = -1; // Reset vertical movement position
                        item = getNextFocusableItem(items, false, 1, false);
                }
                
                // Finally set the focus if it has been found
                if (item != null) {
                        for (int i = 0; i < items.length; i++) {
                                if (items[i] == item) {
                                        focusItem(i, item);
                                        break;
                                }
                        }
                }
                else {
                        if (this.focusedIndex >= items.length) {
                                for(int i=0; i < items.length; i++) {
                                        if(items[i].appearanceMode != Item.PLAIN) {
                                                focusItem(i, items[i]);
                                                return items[i];
                                        }
                                }
                        }
                }
                return item;
        }

        private Item getItemByHorizontalOffset(ArrayList row, int xOffset) {
                Item item = null;
                RowItem rowItem = null;
                int distance = 60000;
                int itemOffset = 0;
                int itemDistance = 0;
                for (int i = 0; i < row.size(); i++) {
                        rowItem = (RowItem) row.get(i);
                        if (rowItem.item.appearanceMode != Item.PLAIN) {
                                itemOffset = rowItem.x + (rowItem.width >> 1);
                                itemDistance = xOffset - itemOffset;
                                if(itemDistance < 0) itemDistance = -itemDistance;

                                if (itemDistance < distance) {
                                        distance = itemDistance;
                                        item = rowItem.item;
                                }
                        }
                }
                return item;
        }
}

⌨️ 快捷键说明

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