どんとこい!PC情報

iアプリを作ってみよう!

 

低レベルAPI型アプリの解説

バイオリズムアプリの解説低レベルAPIを使用したiアプリを使用する上で必要な情報を解説します。

import com.nttdocomo.ui.*;
import com.nttdocomo.util.*;
import java.util.*;
import java.io.*;
import javax.microedition.io.*;
import com.nttdocomo.io.*;

1行目はiアプリを作成する時に必ず必要となるクラスです。2行目以降は時刻取得やメモリ保存等のために必要となります。

// IApplicationクラス
public class Bio extends IApplication {

	public void start(){
		myCanvas ap = new myCanvas(this);
		Display.setCurrent(ap);
	}
}

iアプリのアプリケーションとしての機能を持ったクラスでiアプリの起動用クラス。必ずstart()から始まります。表示用のクラスのインスタンスを作るときIApplicationのインスタンス「this」をパラメータで渡しています。「Display.setCurrent(ap)」で作成したCanvasのインスタンスを画面に表示しています。

//Canvasクラス
class myCanvas extends Canvas {

Canvasクラスを継承して低レベルAPI(画像、線、文字)が使えるようにしています。

	int sin[] = {0,17,35,52,70,87,105,122,139,156,174,191,208,225,242,259,276,292,309,326,
			342,358,375,391,407,423,438,454,469,485,500,515,530,545,559,574,588,602,
			616,629,643,656,669,682,695,707,719,731,743,755,766,777,788,799,809,819,
			829,839,848,857,866,875,883,891,899,906,914,921,927,934,940,946,951,956,
			961,966,970,974,978,982,985,988,990,993,995,996,998,999,999,1000,1000
	};
	Font font;
	Image im;
	Calendar cal1,cal2;
	Date dt1,dt2;

iアプリはsin関数や小数が扱えないため90度分のsinデータを1000倍して配列に入れています。機種依存のなくすためのFontクラス、画像のためのImageクラス、日付を扱うためのCalendarクラス、Dateクラスを定義しています。

	String platform = System.getProperty("microedition.platform");
	if(platform.equals("SO503i")||platform.equals("D503i")){
		font = Font.getFont(Font.FACE_SYSTEM | Font.STYLE_PLAIN | Font.SIZE_SMALL );
	}else{
		font = Font.getDefaultFont();
	}

System.getProperty("microedition.platform")より携帯端末の機種が特定できます。機種によってフォントサイズが異なるのでサイズを調整しています。

	Calendar cal1,cal2;
	Date dt1,dt2;
		cal1 = Calendar.getInstance(); //今日
		dt1 = cal1.getTime();

Calendar.getInstance()で現在日時を取得しています。 cal1.getTime()で1970/1/1 0:00:00から1/1000秒単位の形にかえています。

	// イベント処理のためのメソッド
	public void processEvent(int type, int param){
		long n;
		//ボタンが押された時
		if(type == Display.KEY_PRESSED_EVENT){
			work="";
			if (param == Display.KEY_SOFT2){
				writeData();
				iApp.terminate();

イベント処理のためのメソッドです。typeに行われた動作、paramにパラメータが入ります。この場合はソフトキー2が押された場合の処理を行っています。処理内容はデータを保存した後、アプリケーションを終了しています。

	//角度からグラフの高さを返す
	public int calcSin( int sn ) {
		int rst=0;

		if ((sn>=0) && (sn<=90)){
			rst = (-1)*sin[sn];
		} else if ((sn>90) && (sn<=180)){
			rst = (-1)*sin[180-sn];
	} else if ((sn>180) && (sn<=270)){
   		rst = sin[sn-180];
	} else if ((sn>270) && (sn<=359)){
   rst = sin[360-sn];
	}
	return rst*(h-16)/2000+(h-16)/2;
 }

sinデータが90度分しかないのでそれ以外の場合も返すようにしています。 戻り値は画面の高さから文字表示分を引いた高さを出し、原点を左上にして返しています。

	//日付、周期からグラフ描画配列を計算
	public int calcGrf( long dt, int cyc ) {
		int i;
		for (i=-7;i<9;i++) {
			gx[i+7] = w / 15 * (i + 7);
			gy[i+7] = calcSin((int)((dt+i) % cyc)*360/cyc);
	}
	return gy[0]+8;
 }

7日前から8日後までを計算しています。 drawPolylineで使用できるように配列に入れています。戻り値は説明文を表示させるために一つ目の座標+文字の 高さ/2を返しています。

	//日付の妥当性チェック
	public boolean chkDate() {
		if (month>12 || day>31) return false;
		if (day==31 && (month==4||month==6||month==9||month==11)) return false;
		if (day>=30 && month==2) return false;
		if (day==29 && month==2 && (year%4!=0 || year%100==0)) return false;
		return true;
	}

カレンダークラスは13月や40日を指定しても自動的に計算するので問題ないのですが。一般的ではないのでありえない日付を指定された場合はfalseを返しています。

コメントの投稿


画像の中に見える文字を入力してください。

トラックバックURL

http://www.isl.ne.jp/cgi-bin/mt/mt-tb.cgi/1182

サイト内検索

twitterTwitter

最新ブログ記事

2014年05月07日

BeagleBoardを使ってみる

BaegleBoardでLinuxをブートする

2011年10月12日

WindowsXPの見た目をWindows7風に変更

カレンダー表示をカスタマイズする

2011年09月14日

WindowsXPの見た目をWindows7風に変更

ウィンドウを半透明化する

2011年09月14日

WindowsXPの見た目をWindows7風に変更

Windows7風にカスタマイズ

2011年05月11日

WindowsXPの見た目をWindows7風に変更

使用ソフト概要説明

アクセスランキング

人気のコンテンツをご紹介!

1位

どんとこいPC情報

CD/DVDの仕組み CD編

3位

どんとこいPC情報

CD/DVDの仕組み DVD

4位

どんとこいPC情報

CD/DVDの仕組み DVD±R

ISL 情報戦略研究所

pagetopこのページの先頭へ戻る