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

问题描述:

当采用Android osmdroid/osmbonuspack:的Android osmdroid/osmbonuspack - 显示进度微调,同时加载地图

我怎样才能显示一个进度对话框(或微调),同时加载地图? 当我将所有物品放在地图上时,它应该完成。

+0

当地图初始化时,您是否有监听器或其他东西可以检测到? –

+0

我认为问题是我在UI线程上构建/显示地图。然后什么都不做。正确? – tjm1706

+0

我不这么认为。我个人不使用osmdroid,但我认为它与该线程无关。看看我的答案,您可以构建自己的自定义侦听器,并能够捕捉到您的地图初始化的时刻。 –

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

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

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

在我的情况下,我使用OsmBonusPack(OSM地图),我必须在地图上绘制许多项目。

现在显示的是地图的建设过程中,你可以做以下的(通用)招:扩展DialogFragment做出MessageDialog(显示信息):

步骤1

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

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