FrontPage

2011/07/31からのアクセス回数 8667

Titanium mobileの弱点

今回は、ものまねではなく、オリジナルの記事です。

Titanium mobileの弱点に

  • お絵かきができない

があります。

そこで、 jQueryでグラフを書くを参考に flot を使って体重をグラフに表示してみます。

flotのダウンロード

flotのホームページ から flot-0.7.zip をダウンロードします。

  • jquery.flot.js
  • jquery.js

をプロジェクトにコピーします。

flotのテスト

flotのテスト用にplot_window.jsを以下のように作成します。

plot_window.js

var win = Ti.UI.currentWindow;

var webView = Ti.UI.createWebView({
	url: 'plot.html'
});
win.add(webView);

また、WebViewから表示するplot.htmlを以下のように作成します。

plot.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Flot Examples</title>
    <link href="layout.css" rel="stylesheet" type="text/css">
    <!--[if lte IE 8]><script language="javascript" type="text/javascript" src="../excanvas.min.js"></script><![endif]-->
    <script language="javascript" type="text/javascript" src="jquery.js"></script>
    <script language="javascript" type="text/javascript" src="jquery.flot.js"></script>
 </head>
    <body>
    <h1>Data Graph</h1>

    <div id="graph" style="width:310px;height:240px;"></div>

	<script type="text/javascript">
	var weights = [[1301270400000,0],[1301875200000,8.25],[1302480000000,22],[1303084800000,29],[1303689600000,36.5]];
	var ticks = [1301270400000,1301875200000,1302480000000,1303084800000,1303689600000];
	var setting = {
	        series: {
	            lines: { show:true},
	            points: { show:true}
	        },
	        xaxis: {
	            mode:"time",
	            timeformat:"%m/%d",
	            tickSize: [7,"day"],
	            ticks: ticks
	        },
	        yaxis: {
	            ticks: 10,
	            min: 0,
	        },
	        grid: {
	            backgroundColor: { colors: ["#fff","#eee"] },
	        }
	   };
	$.plot($("#graph"),[{data: weights, color: 2}], setting);
	</script>

 </body>
</html>

win2のurlをplot_window.jsに変えて、動かしてみます。上手くいけば、以下のようなグラフが表示されます。

flot_test.png

テーブルビューのデータをグラフに表示する

今度は、テーブルビューのデータをグラフにプロットします。

plot_windowを生成するときに、weightsとticksを引数と渡します。 また、ナビゲーションバーの左側にGraphボタンを追加します。

table_view.jsに追加

var graphButton = Ti.UI.createButton({title: 'Graph'});
graphButton.addEventListener(
'click', function () {
	if (records.length > 0) {
		var weights = "[";
		var ticks = "[";
		for (i = records.length-1; i >= 0; i--) {
			weights = weights + "[" + records[i].at.getTime() +","+records[i].weight+"],";
			ticks = ticks + records[i].at.getTime() + ",";
		} 
		weights = weights + "]"; ticks = ticks + "]";
		var graphWindow = Ti.UI.createWindow({
			url: 'plot_window.js',
			weights: weights,
			ticks: ticks
		}
		);
		Ti.UI.currentTab.open(graphWindow);		
	}
}
);
win.leftNavButton = graphButton;

plot_window.jsの変更

次にplot_window.jsで渡された値をグラフにプロットします。 これには、WebView.evalJS関数を使います。

plot_window.jsに以下を追加します。

webView.addEventListener('load', function(){
	webView.evalJS('weights =' + win.weights + ';');
	webView.evalJS('ticks =' +  win.ticks + ';');
	webView.evalJS('setting.xaxis.ticks = ticks;');
	webView.evalJS('$.plot($("#graph"),[{data: weights, color: 2}], setting);');	
});

動作確認

では、テーブルビューの左上に表示されたGraphボタンを押してみます。 以下のようなグラフが表示されたら完成です!

graph.png

プログラムソース

ここまでのプログラムソースは、

にまとめてあります。

コメント

選択肢 投票
おもしろかった 22  
そうでもない 0  
わかりずらい 1  

皆様のご意見、ご希望をお待ちしております。

  • weights, ticksの設定にミスあり、webView.evalJS('weights =' + win.weights + ';');のようにセミコロンを追加しました。 -- 竹本 浩? 2011-08-05 (金) 13:45:55

(Input image string)


添付ファイル: fileDemo.zip 1448件 [詳細] filegraph.png 1274件 [詳細] fileflot_test.png 1331件 [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-03-03 (木) 16:55:26 (2973d)
SmartDoc