Android MapView加载黑屏

时间:2014-12-15 15:00:56

标签: android google-maps android-activity android-mapview

大家好,我点击Listview中的一个项目后,我有一个Activity正在加载。

此活动显示MapView中的位置,如下所示:

<FrameLayout
                android:id="@+id/mapContainer"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_toEndOf="@+id/imageView"
                android:layout_above="@+id/button"
                android:layout_below="@+id/imageView"
                android:layout_alignParentStart="true"
                android:layout_marginTop="10dp" >

                <TextView
                    android:id="@+id/loading"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="Loading Map..." />

            </FrameLayout>

问题是,如果他/她点击按钮,我想稍后向用户显示地图。

但是活动加载非常慢,甚至在显示任何内容之前都有黑色的空白屏幕。这看起来非常不专业,似乎是错误的。

我尝试首先制作MapView 不可见,并在用户点击按钮时显示,但在活动开始时加载。

我正在尝试使用以下代码:

protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_single_event);

        mapView = new MapView(SingleEvent.this);
        mapView.onCreate(savedInstanceState);
        com.google.android.gms.maps.MapView.LayoutParams mapParams = new com.google.android.gms.maps.MapView.LayoutParams(com.google.android.gms.maps.MapView.LayoutParams.MATCH_PARENT,220);
        mapContainer = (FrameLayout) findViewById(R.id.mapContainer);
        mapContainer.addView(mapView, mapParams);

这个正在显示地图,但活动正在加载到黑色空白屏幕,直到我的活动被加载。

enter image description here

有没有办法第一次加载活动,然后点击按钮加载MapView?

我正在尝试做这样的事情:

Handler handler = new Handler();

    handler.postDelayed(new Runnable() {
                @Override
                public void run() {

            mapView = new MapView(SingleEvent.this);
            mapView.onCreate(savedInstanceState);
            com.google.android.gms.maps.MapView.LayoutParams mapParams = new com.google.android.gms.maps.MapView.LayoutParams(com.google.android.gms.maps.MapView.LayoutParams.MATCH_PARENT,220);
            mapContainer = (FrameLayout) findViewById(R.id.mapContainer);
            mapContainer.addView(mapView, mapParams);

                }
            },1000);

但是使用该代码,Map不会加载它只显示灰色空白网格。 我认为这是因为 savedInstanceState ,但也许有一个解决方法?

我试图保存Bundle savedInstanceState,加载如上。

2 个答案:

答案 0 :(得分:0)

您可以使用MapFragment。在onCreate()中,您可以将可见性设置为不可见。地图准备就绪后,将调用onMapReady(),您可以在那里配置地图设置。

答案 1 :(得分:0)

由于硬件加速和大堆,我遇到了同样的问题。我在应用程序级别使用了这些功能。但我从应用程序级别删除它们并在他们使用的活动中使用它们。包含SupportMapFragment的活动不需要这些功能。所以我把这个代码从Application标签移到了Manifest中的Activity。

问题发生在Manifest

<application
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:hardwareAccelerated="false"
        android:largeHeap="true">

Manifest移除并在Activity

中使用
<activity
        android:name="com.mycompayname.activities.SignUpActivity"
        android:hardwareAccelerated="false"
        android:largeHeap="true"/>