initializersplashscreen.java
来自「j2me polish学习的经典代码」· Java 代码 · 共 294 行
JAVA
294 行
//#condition polish.midp/* * Created on 23-Mar-2005 at 18:00:01. * * Copyright (c) 2005 Robert Virkus / Enough Software * * This file is part of J2ME Polish. * * J2ME Polish is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * J2ME Polish is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with J2ME Polish; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Commercial licenses are also available, please * refer to the accompanying LICENSE.txt or visit * http://www.j2mepolish.org for details. */package de.enough.polish.ui.splash;import javax.microedition.lcdui.Canvas;import javax.microedition.lcdui.Display;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Font;import javax.microedition.lcdui.Graphics;import javax.microedition.lcdui.Image;import de.enough.polish.ui.AccessibleCanvas;//#if polish.usePolishGui import de.enough.polish.ui.Background;//#endifimport de.enough.polish.util.TextUtil;/** * <p>Provides a SplashScreen that intialises the real application in a background thread.</p> * * <p>Copyright (c) 2005, 2006 Enough Software</p> * <pre> * history * 23-Mar-2005 - rob creation * </pre> * @author Robert Virkus, j2mepolish@enough.de */public class InitializerSplashScreen//#ifdef polish.classes.fullscreen:defined //#= extends ${polish.classes.fullscreen}//#else extends Canvas//#endifimplements Runnable, AccessibleCanvas{ //#if polish.classes.ApplicationInitializer:defined //#= private final ${ classname( polish.classes.ApplicationInitializer) } initializer; //#else private final ApplicationInitializer initializer; //#endif private boolean isInitialized; private Displayable nextScreen; private final Display display; //#ifdef polish.classes.SplashView:defined //#= private final ${ classname( polish.classes.SplashView) } view; //#else private final Image image; private final String readyMessage; private final int messageColor; private final int backgroundColor; //#endif //#if false private final SplashView view; //#endif private String message; //#if polish.usePolishGui private Background background; //#endif private boolean isStarted; //#if !polish.classes.SplashView:defined /** * Creates a new InitializerSplashScreen using the internal default view. * The message will be shown in the default font. * * @param display the display responsible for switching screens * @param image the image that is shown in the center * @param backgroundColor the background color, e.g. white: 0xFFFFFF * @param readyMessage the message that is displayed when the application has been initialized * @param messageColor the color for the message, e.g. black: 0 * @param initializer the application initializer that will be called in a background thread */ //#if polish.classes.ApplicationInitializer:defined //#= public InitializerSplashScreen( Display display, Image image, int backgroundColor, String readyMessage, int messageColor, ${ classname( polish.classes.ApplicationInitializer) } initializer ) //#else public InitializerSplashScreen( Display display, Image image, int backgroundColor, String readyMessage, int messageColor, ApplicationInitializer initializer ) //#endif { super(); //#if polish.midp2 && !(polish.Bugs.fullScreenInShowNotify || polish.Bugs.fullScreenInPaint) super.setFullScreenMode( true ); //#endif this.display = display; this.image = image; this.backgroundColor = backgroundColor; this.readyMessage = readyMessage; this.messageColor = messageColor; this.initializer = initializer; //#if false this.view = null; //#endif } //#endif //#ifdef polish.classes.SplashView:defined //#if polish.classes.ApplicationInitializer:defined //#= public InitializerSplashScreen( Display display, ${ classname( polish.classes.SplashView) } view, ${ classname( polish.classes.ApplicationInitializer) } initializer ) //#else //#= public InitializerSplashScreen( Display display, ${ classname( polish.classes.SplashView) } view, ApplicationInitializer initializer ) //#endif //#if false public InitializerSplashScreen( Display display, SplashView view, ApplicationInitializer initializer ) //#endif { //#if polish.midp2 && !(polish.Bugs.fullScreenInShowNotify || polish.Bugs.fullScreenInPaint) super.setFullScreenMode( true ); //#endif this.view = view; this.display = display; this.initializer = initializer; //#if false this.image = null; this.backgroundColor = 0; this.readyMessage = null; this.messageColor = 0; //#endif } //#endif /** * Sets a message that is displayed immediately. * This call is ignored when a SplashView is used. * * @param message the new message, null when no message should be shown. */ public void setMessage( String message ) { this.message = message; repaint(); } /* (non-Javadoc) * @see javax.microedition.lcdui.Canvas#paint(javax.microedition.lcdui.Graphics) */ public void paint(Graphics g) { //#if polish.Bugs.fullScreenInShowNotify || polish.Bugs.fullScreenInPaint super.setFullScreenMode(true); //#endif //#ifdef polish.FullCanvasSize:defined //#= int height = ${polish.FullCanvasHeight}; //#= int width = ${polish.FullCanvasWidth}; //#else int height = getHeight(); int width = getWidth(); //#endif //#ifdef polish.classes.SplashView:defined this.view.paint( width, height, this.isInitialized, g); //#else g.setColor( this.backgroundColor ); g.fillRect( 0, 0, width, height ); g.drawImage(this.image, width/2, height/2, Graphics.HCENTER | Graphics.VCENTER ); if (this.isInitialized) { g.setColor( this.messageColor ); Font font = Font.getDefaultFont(); String[] lines = TextUtil.wrap( this.readyMessage, font, width - 10, width - 10 ); int y = height - ( lines.length * ( font.getHeight() + 1 ) ); for (int i = 0; i < lines.length; i++) { String line = lines[i]; g.drawString( line, width/2, y, Graphics.TOP | Graphics.HCENTER ); y += font.getHeight() + 1; } } else if (this.message != null) { g.setColor( this.messageColor ); Font font = Font.getDefaultFont(); String[] lines = TextUtil.wrap( this.message, font, width - 10, width - 10 ); int y = height - ( lines.length * ( font.getHeight() + 1 ) ); for (int i = 0; i < lines.length; i++) { String line = lines[i]; g.drawString( line, width/2, y, Graphics.TOP | Graphics.HCENTER ); y += font.getHeight() + 1; } } //#endif } /* (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { try { this.nextScreen = this.initializer.initApp(); //#if !polish.classes.SplashView:defined if (this.readyMessage == null && this.nextScreen != null) { this.display.setCurrent( this.nextScreen ); return; } //#endif this.isInitialized = true; repaint(); if (this.nextScreen == null) { return; } } catch (Exception e) { //#debug error System.out.println("Unable to call initApp()" + e ); } } public void keyPressed(int keyCode) { if (this.isInitialized && this.nextScreen != null ) { this.display.setCurrent( this.nextScreen ); } } public void keyReleased(int keyCode) { // ignore } public void keyRepeated(int keyCode) { // ignore } //#ifdef polish.hasPointerEvents public void pointerPressed(int x, int y) { keyPressed( 0 ); } //#endif //#if polish.midp2 public void sizeChanged( int width, int height ) { // ignore } //#endif public void showNotify() { if (this.isStarted) { return; } this.isStarted = true; Thread thread = new Thread( this ); thread.start(); } public void hideNotify() { this.isStarted = false; } //#if polish.usePolishGui /** * Retrieves the background. * Warning: this method is only available when the J2ME Polish GUI is used, check for the polish.usePolishGui preprocessing symbol * * @return the background */ public Background getBackground() { return this.background; } //#endif //#if polish.usePolishGui /** * Sets the background of this splash screen. * Warning: this method is only available when the J2ME Polish GUI is used, check for the polish.usePolishGui preprocessing symbol * * @param background the background to set */ public void setBackground(Background background) { this.background = background; } //#endif}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?