androidのライブ壁紙について

28
Androidのライブ壁紙について

Upload: yoropan

Post on 02-Nov-2014

21 views

Category:

Technology


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Androidのライブ壁紙について

Androidのライブ壁紙について

Page 2: 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/

Page 3: Androidのライブ壁紙について

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

Page 4: Androidのライブ壁紙について

サンプルプロジェクトを読み込む手順 1.Eclipseでファイル>新規>Android Project 2.Create project from existing sampleを選択 3.ターゲット「Android2.1-update1」を選択 4.プルダウンからCubeLiveWallpaperを選択 5.終了を押す。以上。

ライブ壁紙のサンプルソース

Page 5: Androidのライブ壁紙について

解像度

指定したいピクセル数を 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); } }

Page 6: Androidのライブ壁紙について

画面のピクセルサイズ

端末の回転に応じて動きをつけるもの以外 基本、向きは固定なので横長なのか縦長なのかが分かる。 あとは描くだけ。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();

Page 7: Androidのライブ壁紙について

設定画面設定画面は専用のクラスやレイアウト、保存の仕組みがセットで用意されている。 自分が作りたい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

Page 8: Androidのライブ壁紙について

設定の保存|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ファイルとして 保存される。

Page 9: Androidのライブ壁紙について

エミュレーターで設定ファイルを確認できる。 /data/data/パッケージ名/shared_prefs/setting.xml

設定の保存|SharedPreferences

保存ファイルの設計を予めやっておく。 あとから変えるとアプリの再インストールが必要になる。

Page 10: Androidのライブ壁紙について

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度毎)、アニメーション 難点は確認が面倒な点。(何らかのツールが必要?

設定画面のカスタマイズ

Page 11: Androidのライブ壁紙について

<?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

設定画面のカスタマイズ|リソース

Page 12: Androidのライブ壁紙について

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

Page 13: Androidのライブ壁紙について

Androidアプリ内での行動解析 ーGoogle Analytics for Mobile Apps | Android Techfirm Lab http://labs.techfirm.co.jp/android/cho/577

ユーザーの解析|Google Analytics

Page 14: Androidのライブ壁紙について

<?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

Page 15: Androidのライブ壁紙について

<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)

Page 16: Androidのライブ壁紙について

設定画面は端末の状態によっては値がリセットされるので端末の状態を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

Page 17: Androidのライブ壁紙について

通知バーに青と緑のアイコンが表示される。(青:CPU/ 緑:メモリ) かんたん。一目瞭然。

デバッグ

Page 18: Androidのライブ壁紙について

デベロッパー コンソール|アプリの登録

アプリの説明を書いたら必ず保存を先に行う。 「公開」ボタンを先に押すとせっかく書いた説明が消える。

Page 19: Androidのライブ壁紙について

アプリをSDカードにインストールできるようにする - Tech Booster http://techbooster.jpn.org/application/228/

<manifest android:installLocation=”preferExternal”> ... </manifest>

SDカードへのインストール

internalOnly :

auto :

preferExternal :

内蔵メモリへのインストールのみ許可します。 内蔵メモリ優先でインストールします。しかし内蔵メモリの容量が一杯だった場合はSDカードへ保存されます。 SDカードを優先してインストールしますが、SDカードの容量が一杯だった場合は内蔵メモリへインストールされます。

Page 20: Androidのライブ壁紙について

SDカードにインストールできるアプリを検知・カードへ移動してくれる。 アップデートしたものも検知。

SDカードへのインストール|アプリ

Page 21: Androidのライブ壁紙について

多言語への対応|String.xmlを翻訳

日・英を除く 17ヶ国語に自動翻訳 ZIPでローカルに保存

Page 22: Androidのライブ壁紙について

言語リストを選択して 簡単に言語の切り替えが可能

多言語への対応|確認

Page 23: Androidのライブ壁紙について

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|配列の生成

Page 24: Androidのライブ壁紙について

//サイズを固定する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|配列の生成

Page 25: Androidのライブ壁紙について

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|ランダム

Page 26: Androidのライブ壁紙について

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(非同期処理)

Page 27: Androidのライブ壁紙について

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

Page 28: Androidのライブ壁紙について

Android高速化 テクニック http://www.eflow.jp/common/pdf/090828/eflow-android-toku-2-3sho.pdf

パフォーマンスTips