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

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

解説

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

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

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

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

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

実装

プロジェクトを開く

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

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

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

「Project」ペインの「app > java > ドメイン.modelviewertutorial」を右クリックします。
右クリックメニュー「New > Java Class」を選択します。


Nameに、「ModelFileLoadTask」、
を入力し、「OK」ボタンを押します。

モデルビューアビュークラスのモデルファイル読み込み関数の削除、モデル登録関数の追加

モデルの読み込みの処理は、モデルビューアビュークラスではなく、モデルファイル読み込みクラスが担います。

モデルビューアビュークラスのモデルファイル読み込み関数をコメントアウトします。
モデルビューアビュークラスに、モデル登録関数を追加します。



「Cannot resolve symbol」エラーは、「Alt + Enter」で、必要なクラスをimportします。

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

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

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

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



「Cannot resolve symbol」エラーは、「Alt + Enter」で、必要なクラスをimportします。

モデルファイル読み込みクラスの実装

・ModelFileLoadTaskクラスの親クラスとして「AsyncTask<Void, Integer, Model>」を指定します。(extends節の追加)。
・ModelFileLoadTaskクラスのインターフェースとして、「DialogInterface.OnCancelListener」「DialogInterface.OnClickListener」「OnProgressListener」を指定します。(implements節の追加)。
・インターフェースとして実装しなければならない関数を実装します。

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



「Cannot resolve symbol」エラーは、「Alt + Enter」で、必要なクラスをimportします。

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

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

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

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



「Cannot resolve symbol」エラーは、「Alt + Enter」で、必要なクラスをimportします。
リビルドし、エラー、警告がないことを確認します。

実行

Android端末にて、動作確認。

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

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

ダウンロード

サンプルプロジェクト
github.com上のダウンロードページ

関連ページ

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