Your SlideShare is downloading. ×

Androidのライブ壁紙について

17,379

Published on

Published in: Technology, Art & Photos
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
17,379
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
28
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Androidのライブ壁紙について
  • 2. Android:OS2.1以上 バックグラウンドの「サービス」として動く。 他のアプリがアクティブになるとお休みします。 ネイティブ描画、OpenGL描画が使えます。 今のところFlashは使えないようですがBitmap、Matrixなど似た様なクラスがあり Timerで廻っているビューに描いていく感じ。 設定画面を作ってパラメータをいじったり、通信させて共有なんてことも出来ます。 なので、ネイティブ描画だけでも結構遊べると思います。 ライブ壁紙の仕様 まとめサイト:LiveWallpapers.org http://www.livewallpapers.org/ Free Android 2D OpenGL Game Engine :AndEngine http://www.andengine.org/blog/list-of-andengine-apps-and-games/
  • 3. Android SDK | Android Developers http://developer.android.com/intl/ja/sdk/index.html SDK sample CubeLiveWallpaper android-sdk-windowsdocsresourcessamples 2.8 CubeLiveWallpaper - ライブ壁紙 - ソフトウェア技術ドキュメントを勝手に翻訳 ライブ壁紙のサンプルソース http://www.techdoctranslator.com/resources/samples/ samples-index/cubelivewallpaper-index
  • 4. サンプルプロジェクトを読み込む手順 1.Eclipseでファイル>新規>Android Project 2.Create project from existing sampleを選択 3.ターゲット「Android2.1-update1」を選択 4.プルダウンからCubeLiveWallpaperを選択 5.終了を押す。以上。 ライブ壁紙のサンプルソース
  • 5. 解像度 指定したいピクセル数を dip(端末の解像度におけるピクセル)への変換する 2. 複数画面のサポート - ソフトウェア技術ドキュメントを勝手に翻訳 http://www.techdoctranslator.com/android/practices/screens_support#screen-independence public class DispToPixel { DispToPixel() { } public static int Convert(Context mContext, float pixel) { // Convert the dips to pixels final float scale = mContext.getResources().getDisplayMetrics().density; return (int) (pixel * scale + 0.5f); } }
  • 6. 画面のピクセルサイズ 端末の回転に応じて動きをつけるもの以外 基本、向きは固定なので横長なのか縦長なのかが分かる。 あとは描くだけ。Let’s drawing! 画面サイズを取得する - Tech Booster http://techbooster.jpn.org/ui/921/ WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE); Display disp = wm.getDefaultDisplay(); int width = disp.getWidth(); int height = disp.getHeight();
  • 7. 設定画面 設定画面は専用のクラスやレイアウト、保存の仕組みが セットで用意されている。 自分が作りたいUIと合わない場合、データの取り回しや UIとの兼ね合いを図りながら、ゴリゴリ作ります。 例)右図の「背景色の変更」は ボタンをレイアウトに色数分newして 押したボタンの色を文字列で保存しています。 データを簡単に保存する方法(Preference編) - Tech Booster http://techbooster.jpn.org/application/468/ Taosoftware: Android Preference(プリファレンス) 一覧 http://www.taosoftware.co.jp/blog/2009/04/android_preference_1.html
  • 8. 設定の保存|SharedPreferences public static SharedPreferences sp; sp=getSharedPreferences(”settings”, 0); Editor ed = sp.edit(); //背景色 ed.putInt(”bgcol”,TypographyWallpaper.bgcol); //カラーテーマの色の値 ed.putString(”kuler”,color_sp); //保存を実行 ed.commit(); setting.xml 感覚的にはASでいうところの SharedObjectに似ている。 値は端末にXMLファイルとして 保存される。
  • 9. エミュレーターで設定ファイルを 確認できる。 /data/data/パッケージ名 /shared_prefs/setting.xml 設定の保存|SharedPreferences 保存ファイルの設計を予めやっておく。 あとから変えるとアプリの再インストールが必要になる。
  • 10. 3.5.3 Drawable リソース - ソフトウェア技術ドキュメントを勝手に翻訳 http://www.techdoctranslator.com/android/guide/resources/available-resources/drawable-resource 3.5.1 アニメーションリソース - ソフトウェア技術ドキュメントを勝手に翻訳 http://www.techdoctranslator.com/android/guide/resources/available-resources/animation-resource ビットマップ画像は解像度ごとに作成が必要。 ボタンなどの簡易なグラフィックはShapeDrawableで 表現すると解像度ごとに作らなくてよい。 形状:四角、角丸四角、丸、リング 塗り:ベタ、グラデ(線形、放射、sweep) その他:レイヤー、クリップ、回転(45度毎)、アニメーション 難点は確認が面倒な点。(何らかのツールが必要? 設定画面のカスタマイズ
  • 11. ?xml version=”1.0” encoding=”utf-8”? layer-list xmlns:android=”http://schemas.android.com/apk/res/android” item shape android:shape=”rectangle” padding android:left=”0dip” android:top=”5dip” android:right=”0dip” android:bottom=”5dip” / solid android:color=”#00000000”/ size android:width=”32dp” android:height=”32dp” / /shape /item item .... /layer-list Androidのdrawabl 設定画面のカスタマイズ|リソース
  • 12. Googleが提供しているライブラリを 使う。 ページビュー、イベントトラッキング などを設定できる。 数時間後から結果が得られる。 デバッグ用の設定がないため、 デバッグ用のサイトを追加すると切り 替えが楽。 public static GoogleAnalyticsTracker tracker; tracker = GoogleAnalyticsTracker.getInstance(); // デバッグ用 tracker.start(”UA-xxxxx-2”, 60, this); tracker.start(”UA-xxxxx-1”, 60, this); //ページビュー tracker.trackPageView(”/Setting”); //イベントトラッキング tracker.trackEvent(”ChangeMessage”, // Category “Change”, // Action “count”, // Label 1); // Value ユーザーの解析|Google Analytics
  • 13. Androidアプリ内での行動解析 ーGoogle Analytics for Mobile Apps | Android Techfirm Lab http://labs.techfirm.co.jp/android/cho/577 ユーザーの解析|Google Analytics
  • 14. ?xml version=”1.0” encoding=”utf-8”? RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android” android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:padding=”0dip” ImageView android:layout_width=”wrap_content” android:layout_height=”fill_parent” android:id=”@+id/li_image” android:layout_margin=”4dip” / CheckedTextView android:layout_width=”fill_parent” android:layout_height=”wrap_content” android:id=”@+id/li_name” android:textStyle=”bold” android:layout_toRightOf=”@+id/li_image” android:textColor=”#ffffff” style=”?android:attr/spinnerDropDownItemStyle” android:singleLine=”true” android:ellipsize=”marquee” android:checkMark=”@drawable/checkskin” / /RelativeLayout ListViewをカスタマイズする | Android Techfirm Lab http://labs.techfirm.co.jp/android/cho/751 リストの装飾|Adapter
  • 15. s:List id=”staList” width=”100%” height=”100%” dataProvider=”{staData}” s:itemRenderer fx:Component s:MobileIconItemRenderer labelFunction=”labelFunc” messageField=”name” iconField=”graphic” iconWidth=”48” iconHeight=”48” decoratorClass=”renderers.Chevron” fx:Script ![CDATA[ private function labelFunc(item: Object): String { return item.callLetters + “!!”; } /fx:Script /s:MobileIconItemRenderer /fx:Component /s:itemRenderer /s:List Mobile List, Scroller and Touch - Flex SDK - Adobe Open Source http://opensource.adobe.com/wiki/display/flexsdk/Mobile+List%2C+Scroller+and+Touch リストの装飾|Flex (Hero)
  • 16. 設定画面は端末の状態によっては値がリセットされるので端末の状態を Manifestファイルに記述し、画面クラスの内で 状態変化をチェックする。 向き変更時のアクティビティ再スタート防止 | Android Techfirm Lab http://labs.techfirm.co.jp/android/mita/2613 ... activity android:label=”@string/settings” android:name=”PrefSettings” android:theme=”@android:style/Theme.WallpaperSettings” android:exported=”true” android:configChanges=”keyboard|keyboardHidden|orientation” ... 設定画面|端末の状態(向き、キーボード) AndroidManifest.xml
  • 17. 通知バーに青と緑のアイコンが表示される。(青:CPU/ 緑:メモリ) かんたん。一目瞭然。 デバッグ
  • 18. デベロッパー コンソール|アプリの登録 アプリの説明を書いたら必ず保存を先に行う。 「公開」ボタンを先に押すとせっかく書いた説明が消える。
  • 19. アプリをSDカードにインストールできるようにする - Tech Booster http://techbooster.jpn.org/application/228/ manifest android:installLocation=”preferExternal” ... /manifest SDカードへのインストール internalOnly : auto : preferExternal : 内蔵メモリへのインストールのみ許可します。 内蔵メモリ優先でインストールします。しかし内蔵メモリの容量が一杯 だった場合はSDカードへ保存されます。 SDカードを優先してインストールしますが、SDカードの容量が一杯だっ た場合は内蔵メモリへインストールされます。
  • 20. SDカードにインストールできるアプリを検知・カードへ移動してくれる。 アップデートしたものも検知。 SDカードへのインストール|アプリ
  • 21. 多言語への対応|String.xmlを翻訳 日・英を除く 17ヶ国語に自動翻訳 ZIPでローカルに保存
  • 22. 言語リストを選択して 簡単に言語の切り替えが可能 多言語への対応|確認
  • 23. JavaのArrayは一度サイズが決められると変更することはできない サイズが変わる場合はArrayListを使う。 var mlist:Array = [”aaaaaa”,”bbbbbb”]; mlist[2]=”cccccc”;//あとから追加可能 String[] mlist ={ ”aaaaaa”,”bbbbbb”}; mlist[2]=”cccccc”;//エラー ArrayListString mlist = new ArrayList(); mlist.add(”aaaaaa”); mlist.add(”bbbbbb”); ArrayListString mlist = new ArrayList(); mlist.add(0,”aaaaaa”); mlist.add(1,”bbbbbb”); ASのArray or JavaのArray パフォーマンスTips|配列の生成
  • 24. //サイズを固定する500個までOK ArrayListString mlist = new ArrayList(500); mlist[500];//エラー 501個目 ArrayListのコンストラクタに 初期容量を指定することで要素の追加処理を高速化 - Yukun’s Blog http://www.yukun.info/blog/2008/03/arraylist-capacity.html パフォーマンスTips|配列の生成
  • 25. import java.util.Random; private static Random rand = new Random(); public static int random(int n) { return (rand.nextInt() 0x7FFFFFFF) % n; } Randomクラス So Cool! iAppli Lecture - NextBM http://nextbm.web.fc2.com/200808/files/doc/koza/iappli/iappli.htm パフォーマンスTips|ランダム
  • 26. public class Test extends AsyncTaskString, Void, String { private Activity activity; private ProgressDialog progressDialog = null; private String responseBody; public Test(Activity activity) { this.activity = activity; } @Override protected String doInBackground(String... params) { // バックグラウンドで実行 //例)XMLのパースなど return null; } @Override protected void onPreExecute() { // バックグラウンドの処理前に実行 //例)進行中ダイアログを表示 progressDialog = new ProgressDialog(activity); progressDialog.setMessage( activity.getResources().getText( R.string.loading)); progressDialog.setIndeterminate(true); progressDialog.show(); } @Override protected void onPostExecute(String result) { //処理が終了されたら実行 // 進行中ダイアログをクローズ progressDialog.dismiss(); } } AsyncTaskでユーザビリティを向上させる | Android Techfirm Lab http://labs.techfirm.co.jp/android/cho/1079 パフォーマンスTips|AsyncTask(非同期処理)
  • 27. public class ViewHolder { View base; ImageView icon = null; ViewHolder(View base) { this.base = base; } ... ImageView getIcon() { if (icon == null) { //参照がない場合のみ実行 icon = (ImageView) base.findViewById(R.id.li_image); } return icon; } } Adapterの高速化 | Android Techfirm Lab http://labs.techfirm.co.jp/android/cho/2161 パフォーマンスTips|ViewHolder
  • 28. Android高速化 テクニック http://www.eflow.jp/common/pdf/090828/eflow-android-toku-2-3sho.pdf パフォーマンスTips

×