2014-12-15 3 views
0

Привет всем У меня есть активность, которая загружается после нажатия на элемент внутри моего списка.Android MapView Загрузка черного экрана

Эта активность показывает расположение внутри 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 невидимым и показать его, когда пользователь нажимает кнопку, но он загружается, когда начинается действие.

I'am пытается следующий код:

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 на кнопку нажать?

I'am пытается сделать что-то вроде этого:

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

Но с этим кодом, карта загружается разве его только показывает серую пустую сетку. Я думаю, что из-за savedInstanceState, но, возможно, есть работа вокруг?

Я попытался сохранить Bundle savedInstanceState, загрузив, как указано выше.

+0

если карта только предположить, чтобы он был виден, когда пользователь преформ определенное действие, то должно быть действие, которое получает отображается, когда они делают это действие. Загрузка точки без гарантии того, что она будет отображаться, не является хорошей идеей – tyczj

+0

Возможно, я смогу воспользоваться услугами как-нибудь? – K213

+0

сервис не имеет UI – tyczj

ответ

0

Вы можете использовать MapFragment. В onCreate() вы можете установить видимость на невидимую. Когда карта будет готова, вызывается onMapReady(), и вы можете настроить параметры карты там.

+0

Я попытался использовать MapFragment, но он имеет тот же эффект, что активность загружается очень медленно, а черный пустой экран отображается как 3 секунды. – K213

0

У меня была та же проблема, которая возникала из-за аппаратного ускорения и большой скорости. Я использовал эти функции на уровне приложений. Но я удалил их с уровня приложения и использовал их в своей деятельности. Активность, которая содержала SupportMapFragment, не нуждалась в этих функциях. Поэтому я переместил этот код из тега Application в Activity in Manifest.

Вопрос был в 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"/> 
Смежные вопросы