Androidのライブ壁紙について
-
Upload
yoropan -
Category
Technology
-
view
21 -
download
2
description
Transcript of Androidのライブ壁紙について
Androidのライブ壁紙について
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/
Android SDK | Android Developers http://developer.android.com/intl/ja/sdk/index.html SDK sample CubeLiveWallpaper android-sdk-windows\docs\resources\samples
2.8 CubeLiveWallpaper - ライブ壁紙 - ソフトウェア技術ドキュメントを勝手に翻訳
ライブ壁紙のサンプルソース
http://www.techdoctranslator.com/resources/samples/samples-index/cubelivewallpaper-index
サンプルプロジェクトを読み込む手順 1.Eclipseでファイル>新規>Android Project 2.Create project from existing sampleを選択 3.ターゲット「Android2.1-update1」を選択 4.プルダウンからCubeLiveWallpaperを選択 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); } }
画面のピクセルサイズ
端末の回転に応じて動きをつけるもの以外 基本、向きは固定なので横長なのか縦長なのかが分かる。 あとは描くだけ。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();
設定画面設定画面は専用のクラスやレイアウト、保存の仕組みがセットで用意されている。 自分が作りたい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
設定の保存|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ファイルとして 保存される。
エミュレーターで設定ファイルを確認できる。 /data/data/パッケージ名/shared_prefs/setting.xml
設定の保存|SharedPreferences
保存ファイルの設計を予めやっておく。 あとから変えるとアプリの再インストールが必要になる。
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度毎)、アニメーション 難点は確認が面倒な点。(何らかのツールが必要?
設定画面のカスタマイズ
<?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
設定画面のカスタマイズ|リソース
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
Androidアプリ内での行動解析 ーGoogle Analytics for Mobile Apps | Android Techfirm Lab http://labs.techfirm.co.jp/android/cho/577
ユーザーの解析|Google Analytics
<?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
<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)
設定画面は端末の状態によっては値がリセットされるので端末の状態を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
通知バーに青と緑のアイコンが表示される。(青:CPU/ 緑:メモリ) かんたん。一目瞭然。
デバッグ
デベロッパー コンソール|アプリの登録
アプリの説明を書いたら必ず保存を先に行う。 「公開」ボタンを先に押すとせっかく書いた説明が消える。
アプリをSDカードにインストールできるようにする - Tech Booster http://techbooster.jpn.org/application/228/
<manifest android:installLocation=”preferExternal”> ... </manifest>
SDカードへのインストール
internalOnly :
auto :
preferExternal :
内蔵メモリへのインストールのみ許可します。 内蔵メモリ優先でインストールします。しかし内蔵メモリの容量が一杯だった場合はSDカードへ保存されます。 SDカードを優先してインストールしますが、SDカードの容量が一杯だった場合は内蔵メモリへインストールされます。
SDカードにインストールできるアプリを検知・カードへ移動してくれる。 アップデートしたものも検知。
SDカードへのインストール|アプリ
多言語への対応|String.xmlを翻訳
日・英を除く 17ヶ国語に自動翻訳 ZIPでローカルに保存
言語リストを選択して 簡単に言語の切り替えが可能
多言語への対応|確認
JavaのArrayは一度サイズが決められると変更することはできないサイズが変わる場合はArrayListを使う。
var mlist:Array = [”aaaaaa”,”bbbbbb”]; mlist[2]=”cccccc”;//あとから追加可能
String[] mlist ={ ”aaaaaa”,”bbbbbb”}; mlist[2]=”cccccc”;//エラー
ArrayList<String> mlist = new ArrayList(); mlist.add(”aaaaaa”); mlist.add(”bbbbbb”);
ArrayList<String> mlist = new ArrayList(); mlist.add(0,”aaaaaa”); mlist.add(1,”bbbbbb”);
ASのArray
or
JavaのArray
パフォーマンスTips|配列の生成
//サイズを固定する500個までOK ArrayList<String> mlist = new ArrayList(500); mlist[500];//エラー 501個目
ArrayListのコンストラクタに 初期容量を指定することで要素の追加処理を高速化 - Yukun’s Blog http://www.yukun.info/blog/2008/03/arraylist-capacity.html
パフォーマンスTips|配列の生成
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|ランダム
public class Test extends AsyncTask<String, 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 protectedvoidonPreExecute(){ //バックグラウンドの処理前に実行 //例)進行中ダイアログを表示 progressDialog=newProgressDialog(activity); progressDialog.setMessage( activity.getResources().getText( R.string.loading)); progressDialog.setIndeterminate(true); progressDialog.show(); } @Override protectedvoidonPostExecute(Stringresult){ //処理が終了されたら実行 //進行中ダイアログをクローズ progressDialog.dismiss(); }}
AsyncTaskでユーザビリティを向上させる | Android Techfirm Lab http://labs.techfirm.co.jp/android/cho/1079
パフォーマンスTips|AsyncTask(非同期処理)
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
Android高速化 テクニック http://www.eflow.jp/common/pdf/090828/eflow-android-toku-2-3sho.pdf
パフォーマンスTips