#freeze [[FrontPage]] #contents 2011/07/31からのアクセス回数 &counter; ** Titanium mobileの弱点 [#hdb75254] 今回は、ものまねではなく、オリジナルの記事です。 Titanium mobileの弱点に - お絵かきができない があります。 そこで、 [[jQueryでグラフを書く>http://rd.uniba.jp/blog/2011/05/06/jqueryでグラフを書く/]]を参考に [[flot>http://code.google.com/p/flot/]] を使って体重をグラフに表示してみます。 *** flotのダウンロード [#z5d3e492] [[flotのホームページ>http://code.google.com/p/flot/]] から [[flot-0.7.zip>http://code.google.com/p/flot/downloads/detail?name=flot-0.7.zip]] をダウンロードします。 - jquery.flot.js - jquery.js をプロジェクトにコピーします。 ** flotのテスト [#n383cfac] flotのテスト用にplot_window.jsを以下のように作成します。 plot_window.js #pre{{ var win = Ti.UI.currentWindow; var webView = Ti.UI.createWebView({ url: 'plot.html' }); win.add(webView); }} また、WebViewから表示するplot.htmlを以下のように作成します。 plot.html #pre{{ <!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に変えて、動かしてみます。上手くいけば、以下のようなグラフが表示されます。 &ref(flot_test.png); ** テーブルビューのデータをグラフに表示する [#pfc3b107] 今度は、テーブルビューのデータをグラフにプロットします。 plot_windowを生成するときに、weightsとticksを引数と渡します。 また、ナビゲーションバーの左側にGraphボタンを追加します。 table_view.jsに追加 #pre{{ 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の変更 [#f239a767] 次にplot_window.jsで渡された値をグラフにプロットします。 これには、WebView.evalJS関数を使います。 plot_window.jsに以下を追加します。 #pre{{ 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);'); }); }} *** 動作確認 [#ga372e3a] では、テーブルビューの左上に表示されたGraphボタンを押してみます。 以下のようなグラフが表示されたら完成です! &ref(graph.png); *** プログラムソース [#u1b70512] ここまでのプログラムソースは、 - &ref(Demo.zip); にまとめてあります。 ** コメント [#bd394c0d] #vote(おもしろかった[22],そうでもない[0],わかりずらい[0]) #vote(おもしろかった[22],そうでもない[0],わかりずらい[1]) 皆様のご意見、ご希望をお待ちしております。 - weights, ticksの設定にミスあり、webView.evalJS('weights =' + win.weights + ';');のようにセミコロンを追加しました。 -- [[竹本 浩]] &new{2011-08-05 (金) 13:45:55}; #comment_kcaptcha