手機姓名秀 - NameShow
在手機上展示你的姓名。
[背景]:
1、如果你的名字是生僻字,沒法組成常見詞,別人問起,你得解釋半天,最終還是要拿筆寫出來別人才明白。
2、當你想向別人展示個性簽名時,拿出紙質簽名就太土了,也不方便。
3、當你需要展示名片時,紙質名片沒有帶,手機總帶了吧?NameShow就派上用場了。
[說明]:
1、用WinRAR打開NameShow.jar,
用自己制作的姓名圖片替換原有up.png、left.png、down.png、right.png。
原圖片大小是128x160,根據自己的手機屏幕大小提供相應大小的圖片。
替換完成后,把NameShow.jar安裝到手機即可運行。
2、上下左右導航鍵各對應一張圖片。
3、如果姓名是三個字:up.png對應全名,left.png對應姓,
down.png對應名的第一個字,right.png對應名的第二個字;
如果是姓名是二個字:則down.png可以省略。
4、本程序在CLDC1.0,MIDP2.0環境編譯,Nokia S40的Java環境成功運行。
[問題]
Q:自己制作圖片太麻煩,為什么不能在程序中輸入姓名并保存,每次打開顯示上次輸入的姓名?
A:普通手機沒有超大字體,要想顯示個性畫且超大的全屏字,只能用圖片。
Q:我的手機不是智能機,可以用嗎?
A:支持Java的手機都可以使用。
Q:直接在手機上顯示圖片不是更方便?
A:有的手機全屏顯示圖片時并不優雅,如果用NameShow將更方便切換姓與名的顯示。
NameShowMIDlet.java:
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
/**
* 手機姓名秀 - NameShow
*
* [背景]:
* 1、如果你的名字是生僻字,沒法組成常見詞,別人問起,你得解釋半天,最終還是要拿筆寫出來別人才明白。
* 2、當你想向別人展示個性簽名時,拿出紙質簽名就太土了,也不方便。
* 3、當你需要展示名片時,紙質名片沒有帶,手機總帶了吧?NameShow就派上用場了。
*
* [說明]:
* 1、用WinRAR打開NameShow.jar,
* 用自己制作的姓名圖片替換原有up.png、left.png、down.png、right.png。
* 原圖片大小是128x160,根據自己的手機屏幕大小提供相應大小的圖片。
* 替換完成后,把NameShow.jar安裝到手機即可運行。
* 2、上下左右導航鍵各對應一張圖片。
* 3、如果姓名是三個字:up.png對應全名,left.png對應姓,
* down.png對應名的第一個字,right.png對應名的第二個字;
* 如果是姓名是二個字:則down.png可以省略。
* 4、本程序在CLDC1.0,MIDP2.0環境編譯,Nokia S40的Java環境成功運行。
*
* [問題]
* Q:自己制作圖片太麻煩,為什么不能在程序中輸入姓名并保存,每次打開顯示上次輸入的姓名?
* A:普通手機沒有超大字體,要想顯示個性畫且超大的全屏字,只能用圖片。
*
* Q:我的手機不是智能機,可以用嗎?
* A:支持Java的手機都可以使用。
*
* Q:直接在手機上顯示圖片不是更方便?
* A:有的手機全屏顯示圖片時并不優雅,如果用NameShow將更方便切換姓與名的顯示。
*****************************************
* 開發工具:Eclipse Pulsar for Mobile Java Developers
* 手機模擬器:Nokia S40 6th、Motorola
*****************************************
* @author Winty wintys@gmail.com
* @version 2010-01-30
*
*/
public class NameShowMIDlet extends MIDlet
implements CommandListener{
private Command back,exit,help,about;
private NameDisplayCanvas canvas;
private Image []imgs;//四個圖片,順序為上下左右。加一個logo.png,共五個。
private Image img;
private boolean isHelp = false;
private boolean isAbout = false;
public NameShowMIDlet() {
imgs = new Image[5];
back = new Command("返回",Command.BACK,1);
exit = new Command("退出",Command.EXIT , 2);
help = new Command("幫助",Command.HELP, 3);
about = new Command("關于",Command.HELP, 4);
canvas = new NameDisplayCanvas();
canvas.addCommand(back);
canvas.addCommand(exit);
canvas.addCommand(help);
canvas.addCommand(about);
canvas.setCommandListener(this);
Display.getDisplay(this).setCurrent(canvas);
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
}
protected void pauseApp() {
}
protected void startApp() throws MIDletStateChangeException {
String []imgnames = {"up.png","down.png","left.png","right.png","logo.png"};
for(int i = 0;i < imgnames.length; i++){
InputStream is = null;
try{
is = this.getClass().getResourceAsStream(imgnames[i]);
}catch(NullPointerException e){
is = null;
e.printStackTrace();
}
if( is != null){
try {
imgs[i] = Image.createImage(is);
} catch (IOException e) {
e.printStackTrace();
}
}//end of if
}//end of for
}
public void commandAction(Command c, Displayable d) {
if( c == exit){
try {
destroyApp(false);
notifyDestroyed();
} catch (MIDletStateChangeException e) {
e.printStackTrace();
}
}
if( c == about){
isAbout = true;
canvas.repaint();
}
if( c == help){
isHelp = true;
canvas.repaint();
}
}
//內部類,屏幕Canvas
class NameDisplayCanvas extends Canvas{
private static final int COLOR_INFO = 0x0078FF;
private static final int COLOR_ERROR = 0xFF0000;
public NameDisplayCanvas(){
this.setFullScreenMode(true);
}
protected void paint(Graphics g) {
int w = getWidth();
int h = getWidth();
if(isAbout){
String name = "NameShow - 姓名秀";
String author = "作者:天堂露珠";
String email = "Email:wintys@gmail.com";
String date = "Date:2010-01-30";
g.setColor(COLOR_INFO);
displayInfo(g,name,author,email,date);
if(imgs[4] != null)
g.drawImage(imgs[4], w/2, h/2-40, Graphics.TOP|Graphics.HCENTER);
isAbout = false;
return;
}
if(isHelp){
String str1 = "導航鍵各對應一張圖片";
String str2 = "'*'鍵顯示about信息";
String str3 = "'#'鍵退出程序";
String str4 = "";
g.setColor(COLOR_INFO);
displayInfo(g,str1,str2,str3,str4);
isHelp = false;
return;
}
//默認顯示第一張圖片
if(img == null)
img = imgs[0];
if(img != null)
g.drawImage(img, 0, 0, Graphics.TOP|Graphics.LEFT);
else{//當所請求顯示的圖片沒有找到時,顯示此提示
String str = "無法載入圖片!";
clearScreen(g);
g.setColor(COLOR_ERROR);
g.drawString(str, w/2, h/2, Graphics.BASELINE | Graphics.HCENTER);
}
}
protected void keyPressed(int keyCode) {
int action = getGameAction(keyCode);
switch(action){
case LEFT:
img = imgs[2];
break;
case RIGHT:
img = imgs[3];
break;
case DOWN:
img = imgs[1];
break;
case UP:
case FIRE:
default:
img = imgs[0];
break;
}
repaint();
//按下'#'退出
if(keyCode == KEY_POUND){
try {
destroyApp(false);
} catch (MIDletStateChangeException e) {
e.printStackTrace();
}
notifyDestroyed();
}
//按下'*'顯示幫助信息
if(keyCode == KEY_STAR){
isAbout = true;
}
}
//清屏
private void clearScreen(Graphics g){
int color = g.getColor();
g.setColor(0xFFFFFF);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(color);
}
//顯示文本信息
private void displayInfo(Graphics g,String s1,String s2 ,String s3,String s4){
int w = getWidth();
int h = getWidth();
clearScreen(g);
int anchor = Graphics.BASELINE | Graphics.HCENTER;
g.drawString(s1, w/2, h/2, anchor);
g.drawString(s2,w/2,h/2+20,anchor);
g.drawString(s3,w/2,h/2+40,anchor);
g.drawString(s4,w/2,h/2+60,anchor);
}
}//end of NameDisplayCanvas
}
運行效果:
這里使用的是測試姓名圖片(姓名為“王二小”):
NameShow下載:
http://www.tkk7.com/Files/wintys/file/NameShow.zip
原創作品,轉載請注明出處。
作者:天堂露珠 (wintys@gmail.com)
博客:http://www.tkk7.com/wintys
posted on 2010-01-30 21:48
天堂露珠 閱讀(475)
評論(0) 編輯 收藏 所屬分類:
Java