Android osmdroid / osmbonuspack - 在加载地图时显示进度微调器

时间:2016-04-22 17:48:37

标签: android osmdroid

使用Android osmdroid / osmbonuspack时:

如何在加载地图时显示进度对话框(或微调框)? 它应该在我将所有项目都放在地图上时完成。

2 个答案:

答案 0 :(得分:1)

您可以创建自己的活动,例如this 然后只需在onCreate中启动进度对话框,并在初始化地图时停止它。

答案 1 :(得分:-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,然后等待300msecs左右的短时间在背景中。这将允许消息框出现!

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