2016-04-22 14 views
1

のロードショー進捗スピナーながら使用する場合のAndroid osmdroid/osmbonuspack:アンドロイドosmdroid/osmbonuspack - 地図

がどのようにマップをロード中にプログレスダイアログ(またはスピナー)を表示することができますか? 地図上にすべてのアイテムを置いたときに終了するはずです。

+0

マップが初期化されたときにリスナーなどを検出できますか? –

+0

私は、UIスレッドでマップを構築/表示するのが問題だと思います。それから何もできません。正しい? – tjm1706

+0

私はそうは思わない。私は個人的にはosmdroidを使用しませんが、スレッドとは何の関係もないと思います。私の答えを見て、独自のカスタムリスナーを構築し、マップが初期化された瞬間を捉えることができます。 –

答えて

-1

この回答は唯一です! UIを構築するときにかなりの時間がかかります。次に、作業中であることを示す一時的なポップアップが表示されることがあります。

最初に、RelativeLayoutを使ってLayoutファイルにProgressBarを追加していました。多くの属性を持つOSMマップを構築すると、ProgressBarの表示が禁止されます。

通常、ProgressBarなどは、重い作業がバックグラウンドで行われる場合にのみ正しく動作します。悲しいかな、サードパーティのパッケージのせいでできません。

私の場合は、OsmBonusPack(OSMマップ)を使用しています。地図上に多くの項目をプロットする必要があります。

ステップ1:DialogFragmentを拡張(メッセージを示す)MessageDialogを行います

public class MessageDialog extends DialogFragment { 
    ProgressDialog mDialog = null; 
    public MessageDialog() { 
    } 
    @Override 
    public Dialog onCreateDialog(final Bundle savedInstanceState) { 
     mDialog = new ProgressDialog(getActivity()); 
     this.setStyle(STYLE_NO_TITLE, getTheme()); 
     mDialog.setMessage("Building the map ... "); 
     mDialog.setCancelable(false); 
     return mDialog; 
    } 
} 
今マップの建物では、次の(ユニバーサル)トリックを行うことができます進行中であることを示す

ステップ2:重いUI作業を開始すると(マップ上に多数のアイテムがあるなど)、MessageDialogが表示されてから300msec程度の短い時間が経過すると、メッセージボックスが表示されます。

FragmentManager fm = getActivity().getSupportFragmentManager(); 
myInstance = new MessageDialog(); 
myInstance.show(fm, "some_tag"); 
new AsyncTask<Void, Void, Void>() { 
    @Override 
    protected Void doInBackground(Void... voids) { 
     try { Thread.sleep(300); } catch(Exception e) {} 
     return null; 
    } 
    @Override 
    protected void onPostExecute(Void msg) { 
     // OPTION A: 
     start navigating to the map screen ... and do there the myInstance.dismiss(); 
     // OPTION B: 
     do the work on the UI here AND myInstance.dismiss(); 
    } 
}.execute(); 
1

thisのような独自のイベントを作成することができます。
その後、onCreateで進行状況ダイアログを開始し、マップの初期化時に停止します。