ANDROIDHACKS#18 非同期処理を行う#19 プログレスバーを使う#20 音声読み上げ機能を使う担当:いぐさ
Twitter : @ginyutok
23/04/12
1
この資料について• この資料は下記の本をベースに勉強会で作成した資料です。
• 『 Android Hacks』(株式会社ブリリアントサービス著、オライリー・ジャパン刊)
• この本の紹介ページが下記にあります。
• http://www.oreilly.co.jp/books/9784873114569/
23/04/12
2
アジェンダ1. 非同期処理
1. ハンドラ
2. プログレスバー1. プログレスバーによる進捗表示2. プログレスバーをタイトルバーに表示3. Hackをさらに Hackする
3. 音声読み上げ機能1. Hackをさらに Hackする
23/04/12
3
1. 非同期処理
23/04/12
4
1.非同期処理• 長時間アプリケーションの応答がない → Apprication Not
Responding ダイアログが発生
• 負荷の高い処理は画面描画の実行とは別のスレッドにするのが一般的
• ※画面描画はメインスレッドで行わなければならない!
23/04/12
5
1-1.ハンドラ• ハンドラ
• 他スレッドからメインスレッドに対して処理を依頼する窓口
• 例:Thread th = new Thread() {
public void run() {
Handler.post(new Runnable()) {
@Override public void run() {
mTextView1.setText(“process finish!!”);
mProgressDialog.dismiss();
・・・・・・・・・・・・・・・・・
23/04/12
6
ハンドラハンドラ
これらの処理はメインスレッドで行
われる
これらの処理はメインスレッドで行
われる
2. プログレスバー
23/04/12
7
2.プログレスバー• プログレスバー
• ProgressBarクラス• XMLに <ProgressBar>タグを埋め込む• Android2.1の場合、 7種類のプログレスバーが存在
• ProgressBarStyle・・・円状。大きな物は~ Large、小さなものは~ Small
• ProgressBarStyleInverse・・・色を反転した円状のもの。 Largeと Smallがある
• ProgressBarStyleHorizontal・・・水平方向の棒状の物。 Indeterminate属性の false指定に対応 (後述 )
23/04/12
8
2-1.プログレスバーによる進捗表示• ProgressBarクラス
• Max・・・全体量を表す (デフォルト値: 100)• Progress・・・進捗状況 (メイン )• SecondaryProgress・・・進捗状況 (サブ )
• 例:動画のストリーミング再生• Progress・・・再生状況• SecondaryProgress・・・バッファリング状況
23/04/12
9
2-1.プログレスバーによる進捗表示• ProgressBarクラス
• Indeterminate属性:進捗状況を明確に表示しないか• true(表示しない ) : Maxの値が不定になる• false(表示する ) : Maxの値が一定
• Indeterminate属性は ProgressBarStyleHorizontalのみ有効• 他のスタイルでは falseになっているが、進捗状況を明確に表示しないので、今後の仕様変更に注意
23/04/12
10
2-2.プログレスバーにタイトルバーに表示• タイトルバーにもプログレスバーが表示できる
• 記述は Activityクラスのメソッド内に• requestWindowFeatureメソッドでタイトルバー内にプログレスバー表示を指定
• 引数で形状を指定できる• setProgress~メソッドで Progressや SecondaryProgressの値を設定
• Maxの値は指定できない (0~ 10000)
23/04/12
11
2-3.Hackをさらに Hackする• 多少時間がかかるアプリの起動画面にプログレスバーを利用
• 状態に応じてプログレスバーの進捗が伸びていく
23/04/12
12
2-3.Hackをさらに Hackする• 概要
• 起動中画面 : progressview• 起動後画面:mainview• これらを showProgressメソッドと hideProgressメソッドで表示・非表示を切り替える
23/04/12
13
3. 音声読み上げ機能
23/04/12
14
3.音声読み上げ機能• TextToSpeechクラス
• TextToSpeech.OnInitListenerを実装する必要がある• 日本語未対応
• ローマ字ならそれっぽく読ませることも出来る?• コンストラクタの引数は
• 第 1引数: Contextクラス (Activityや Serviceの基底クラス )
• 第 2引数: TextToSpeech.OnInitListenerを実装したクラス• Localeクラスで言語設定
23/04/12
15
3.音声読み上げ機能• TextToSpeechクラス
• Speakメソッドで読み上げ• 第 1引数:読み上げる文字列• 第 2引数:キューの追加方法• 第 3引数:別途のパラメータ
• キューの追加方法• QUEUE_FLUSH:読み上げ中でも新しい文字列を読み上げる(待ち行列も破棄)
• QUEUE_ADD:待ち行列に追加
23/04/12
16
3-1.Hackをさらに Hackする• 自分で好きなテキストを読み上げさせたり、ピッチや速度を変更できるカスタムビューを作成する
• サンプルプログラムがあるので、いろいろやってみると面白いです
• プログラムの詳細は省略
23/04/12
17
参考 URL• Android Developers
• http://developer.android.com/intl/ja/index.html
23/04/12
18