13.モデルファイル読み込みの進捗表示

(開発環境として「Eclipse」を使用した、古い情報です。
 開発環境として「Android Studio」を使用した、新しい情報は、
 「ホーム > プログラミング > モデルビューアを作る ( Android + OpenGL ES 1.0/1.1 ) ( Android Studio 2.3.3 版 )」)

12.で作成したモデルビューアは、ファイルサイズの大きなモデルファイルを読み込んだ際など、ファイル読み込み開始からファイル読み込み完了まで時間を要する場合に、ソフトウェアが固まったかのような状態になります。
モデルファイル読み込みの進捗表示ダイアログを表示し、ファイル読み込み開始からファイル読み込み完了まで時間を要する場合でも、ソフトウェアが固まったかのような状態にならないようにします。

使用開発環境は、Eclipse 3.7.2 ベースの Pleiades です。

解説

進捗表示は、ProgressDialog を利用します。

また、ファイル読み込み処理を、別スレッド化します。
Android API には、AsyncTaskという、簡単に、処理を別スレッド化することができるクラスが用意されているので、これを利用します。

AsyncTaskの派生クラスとして、ファイル読み込みタスククラスを作成します。

ProgressDialogは、デフォルトの設定では、キャンセルボタンがないので、キャンセルボタンを追加し、キャンセルボタンを押した際には、ファイル読み込み処理をキャンセルするようにします。

ファイル読み込みタスククラスを、ファイル読み込みパッケージのプログレスリスナーインターフェースを実装するクラスにし、ファイル読み込み処理の進捗を取得できるようにします。

実装

プロジェクトを開く

12.で作成したモデルビューアプロジェクトを開きます。

モデルファイル読み込みクラスの作成

モデルファイルの読み込み処理のスレッドを担うクラスを作成します。

パッケージエクスプローラで、作成したプロジェクトの下の「src」の下の作成したパッケージを右クリックし、 右クリックメニューの「新規 > クラス」 を選択します。


名前 にクラス名「ModelFileLoadTasks」、
スーパークラスに、「AsyncTask<Void, Integer, Void>」、
インターフェースに、「DialogInterface.OnCancelListener」「DialogInterface.OnClickListener」「modelfileloader.OnProgressListener」
を入力し、「完了」ボタンを押します。

ModelFileLoadTaskクラスの中身を以下のようにします。

モデルビューアビュークラスのモデルファイル読み込み関数の修正

モデルビューアビュークラスのモデルファイル読み込み関数を修正します。

loadModelFile関数の引数に、プログレスリスナーを追加します。

ModelFileLoader.load関数の第2引数として、プログレスリスナーを渡すように修正します。

モデルファイルローダークラスのモデルファイル読み込み関数の修正

モデルファイルローダークラスのモデルファイル読み込み関数を修正します。

load関数の引数に、プログレスリスナーを追加します。

StlFileLoader.load関数、および、ObjFileLoader.load関数の第2引数として、プログレスリスナーを渡すように修正します。

メインアクティビティクラスのファイル選択アクティビティの結果に関する処理の修正

メインアクティビティクラスのファイル選択アクティビティの結果に関する処理を修正します。

モデルビューアビューのloadModelFile関数を呼び出していた処理を、ファイル読み込みタスクを生成し、ファイル読み込みタスクを実行する処理に修正します。

ファイル読み込みタスク変数をメンバ変数に追加します。

実行

Android Virtual Device にて、動作確認。

※ ターゲット:「Android 4.0.3 - API Level 15」、ハードウェア:「GPU emulation」をyes、として作成したAndroid Virtual Device にて動作確認。

実行し、モデルファイル読み込み進捗ダイアログが表示されるのを確認します。

al.objファイルの読み込み

ダウンロード

サンプルプロジェクト

サンプルモデル(al.obj)

関連ページ

前項目:12.「面はすべて同一のマテリアル設定」ではないモデルファイルの読み込みに対応する