随笔 - 117  文章 - 72  trackbacks - 0

声明:原创作品(标有[原]字样)转载时请注明出处,谢谢。

常用链接

常用设置
常用软件
常用命令
 

订阅

订阅

留言簿(7)

随笔分类(130)

随笔档案(123)

搜索

  •  

积分与排名

  • 积分 - 154453
  • 排名 - 389

最新评论

  手机姓名秀 - 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.blogjava.net/Files/wintys/file/NameShow.zip
原创作品,转载请注明出处。
作者:天堂露珠 (wintys@gmail.com)
博客:http://www.blogjava.net/wintys

posted on 2010-01-30 21:48 天堂露珠 阅读(464) 评论(0)  编辑  收藏 所属分类: Java

只有注册用户登录后才能发表评论。


网站导航: