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

Android osmdroid / osmbonuspack - show progress spinner while loading a map

使用Androidosmdroid/osmbonuspack时:

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

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

这个答案只是 !!!在构建 UI 需要相当长的时间时很有用。然后您可能会显示一个临时弹出窗口,指示工作正在进行中。

我的第一个猜测当然是使用 RelativeLayout 在 Layout 文件中添加 ProgressBar。构建具有许多属性的 OSM 地图禁止显示 ProgressBar。

通常情况下,只有在后台完成繁重的工作时,ProgressBar 或类似的东西才能正常工作。 las,由于第三方软件包而不可能。

在我的例子中,我使用 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,然后在后台等待 300 毫秒左右的短时间。这将允许显示消息框!

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