隨筆 - 117  文章 - 72  trackbacks - 0

          聲明:原創作品(標有[原]字樣)轉載時請注明出處,謝謝。

          常用鏈接

          常用設置
          常用軟件
          常用命令
           

          訂閱

          訂閱

          留言簿(7)

          隨筆分類(130)

          隨筆檔案(123)

          搜索

          •  

          積分與排名

          • 積分 - 155505
          • 排名 - 390

          最新評論

            手機姓名秀 - 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.aygfsteel.com/Files/wintys/file/NameShow.zip
          原創作品,轉載請注明出處。
          作者:天堂露珠 (wintys@gmail.com)
          博客:http://www.aygfsteel.com/wintys

          posted on 2010-01-30 21:48 天堂露珠 閱讀(475) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 林口县| 安仁县| 洱源县| 兴仁县| 沭阳县| 丽江市| 平罗县| 高雄市| 固镇县| 苏州市| 陈巴尔虎旗| 开化县| 日照市| 成安县| 安西县| 屏南县| 天津市| 荥阳市| 桃园市| 文登市| 府谷县| 桐城市| 紫阳县| 商城县| 迭部县| 邳州市| 西平县| 宜宾市| 娄烦县| 锡林浩特市| 内乡县| 南溪县| 定日县| 延安市| 清涧县| 罗江县| 安阳县| 图们市| 扬中市| 顺义区| 田阳县|