`

[原]手机姓名秀 - NameShow

阅读更多
  手机姓名秀 - 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

分享到:
评论

相关推荐

    Python库 | human-name-compare-0.3.14.tar.gz

    本篇将深入探讨一个名为`human-name-compare`的Python库,版本为0.3.14,它是一个专门用于处理和比较人名的工具,适用于那些需要处理大量人名数据或进行姓名规范化的工作场景。本文将详细介绍该库的功能、使用方法...

    tomcat httpHeaderSecurity.jar

    &lt;filter-name&gt;httpHeaderSecurity&lt;/filter-name&gt; &lt;filter-class&gt;org.apache.catalina.filters.HttpHeaderSecurityFilter&lt;/filter-class&gt; &lt;async-supported&gt;true&lt;/async-supported&gt; &lt;init-param&gt; &lt;param-name&gt;...

    Tele-Verification-Positive-Caller-Name--Name-Fathers-Name-OR-Husbands-Name-Address:远程验证阳性

    "Tele-Verification-Positive-Caller-Name--Name-Fathers-Name-OR-Husbands-Name-Address"这一标题和描述暗示了一个系统或过程,该过程旨在通过电话确认个人的身份,包括他们的全名、父亲的名字或丈夫的名字以及地址...

    姓名密码(Namekey) 2006 7[1].8.1 绿色破解版.rar

    姓名密码(Namekey) 2006 7[1].8.1 绿色破解版.rar

    random-name:javascript生成随机姓名或随机昵称(随机拼接)

    ramdon-name生成随机昵称,随机姓名,男生姓名,女生姓名使用方法download##在需要用到的文件引用即可 // import randomName from 'youpath/random-name'生成一个名字(男女不限)randomName.getName();生成一个名字...

    sort-by-name.rar_site:www.pudn.com_sortbyname

    在编程领域,排序是至关重要的一个操作...总之,"sort-by-name.rar"文件中的算法可能涉及了如何利用C++的标准库函数和自定义比较函数,按照字典顺序对姓名列表进行排序,这在数据处理和分析中是非常常见且实用的技能。

    Tele-Verification-Follow-Up-Caller-Name--Reason---Name-Fathers-Name-OR-Husbands-N:远程验证跟进

    "Tele-Verification-Follow-Up-Caller-Name--Reason---Name-Fathers-Name-OR-Husbands-N"这一标题可能指的是一个系统或过程,用于在电话中进行后续验证,确保与客户进行沟通的人的身份真实可靠。这一过程涉及到以下...

    display-name:以各种 Web 安全方式显示用户真实姓名的简单包,即 Eric B. 或 E B. 还包括 Laravel Facade

    显示名称 一个简单的包,以各种 Web 安全方式显示用户的真实姓名,即 Eric B. 或 E B. 还包括一个 Laravel Facade。安装通过作曲家$ composer require ericmakesstuff/display-name用法 $ displayName = new ...

    姓名密码NameKey2003

    姓名综合分析,中文名取名向导(同行功能最强),八字命运预测,中文姓名分析,英文姓名分析,公司,品牌,行业名称分析,中华姓氏来源及单字五行字意与通用字义查询,阴阳历相互转换等其他起名辅助功能。本软件共收录...

    tomcat跨域请求配置

    &lt;filter-name&gt;CORS&lt;/filter-name&gt; &lt;filter-class&gt;com.thetransactioncompany.cors.CORSFilter&lt;/filter-class&gt; &lt;init-param&gt; &lt;param-name&gt;cors.allowOrigin&lt;/param-name&gt; &lt;param-value&gt;*&lt;/param-value&gt; &lt;/init-...

    java代码-使用java构造Person类。包括姓名(name),性别和年龄(age)的源代码

    java代码-使用java构造Person类。包括姓名(name),性别和年龄(age)的源代码 ——学习参考资料:仅用于个人学习使用!

    简单易用的gizp包,tk-filters.jar

    &lt;filter-name&gt;GZIPFilter&lt;/filter-name&gt; &lt;filter-class&gt;com.tacitknowledge.filters.gzipfilter.GZIPFilter&lt;/filter-class&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;GZIPFilter&lt;/filter-name&gt; &lt;url-pattern&gt;*.js&lt;/url...

    tomcat跨域文件下载和教程

    &lt;filter-name&gt;CORS&lt;/filter-name&gt; &lt;filter-class&gt;com.thetransactioncompany.cors.CORSFilter&lt;/filter-class&gt; &lt;init-param&gt; &lt;param-name&gt;cors.allowOrigin&lt;/param-name&gt; &lt;param-value&gt;*&lt;/param-value&gt; ...

    jQuery实现标签子元素的添加和赋值方法

    select class="dept-name-show" style="width: 70%;"&gt; &lt;/select&gt; 二、编写js语句: [removed] $(function () { var dname = $(".dept-name-show").eq(0);//选定&lt;select&gt;标签 var url = "${...

    爬虫工具辅助工具+curl命令转python代码+自动将网络请求转成python代码

    -h, --help show this help message and exit -o OUTPUT, --output OUTPUT 文件输出目录,不传则与源文件同目录 -n NAME, --name NAME 输出的python文件名 解压后,将src文件夹添加到环境变量path中,即可在...

    Package Name Viewer-3.3.1.apk

    查看手机目前安装的所有应用 $ pm list packages 卸载包名为 com.x 的应用(含 “-k” 的命令会保留用户数据,而后者则不会) $ pm uninstall -k --user 0 com.x $ pm uninstall --user 0 com.x *停止或冻结包名为...

    MySQL 入门学习 ——基础教程

    我们要建立一个你公司员工的生日表,表的内容包含员工姓名、性别、出生日期、出生城市。 mysql&gt; CREATE TABLE mytable (name VARCHAR(20), sex CHAR(1), -&gt; birth DATE, birthaddr VARCHAR(20)); Query OK, 0 ...

    web.xml详解(web-app_2_3.dtd)

    ELEMENT filter-mapping (filter-name, url-pattern | servlet-name)&gt; &lt;!ELEMENT filter-name (#PCDATA)&gt; &lt;!ELEMENT url-pattern (#PCDATA)&gt; &lt;!ELEMENT servlet-name (#PCDATA)&gt; ``` 示例: ```xml &lt;filter-...

    cas 配置client 1.0 &2.0 及proxy DEMO 说明

    &lt;filter-name&gt;CAS HttpServletRequest Wrapper Filter&lt;/filter-name&gt; &lt;filter-class&gt; org.jasig.cas.client.util.HttpServletRequestWrapperFilter &lt;/filter-class&gt; &lt;!-- CAS SINGLE SIGN OUT FILTER --...

    在vue中使用el-tab-pane v-show/v-if无效的解决

    `v-show` 和 `v-if` 都是 Vue 中的条件渲染指令,它们的主要区别在于渲染策略:`v-if` 会根据条件决定是否编译元素,而 `v-show` 则始终编译元素,只是通过改变 CSS 的 `display` 属性来控制显示与隐藏。然而,当...

Global site tag (gtag.js) - Google Analytics