2015-01-12 58 views
5

我在我的Android應用程序中添加了一個mapview。我在清單中使用了正確的設置,現在我正面臨一個問題。當我去到我有地圖的地方時,它只顯示畫布而不顯示地圖。如果我觸摸它只會開始加載。即使那樣它也沒有完全加載,只加載到一定的水平。如果我繼續觸摸它連續加載的屏幕。但即使如此,我無法放大或縮小,甚至無法移動地圖。有沒有解決方案?我做錯了什麼?Android MapView不加載,除非你在地圖上觸摸

我的代碼

  MapView mapView; 
      GoogleMap map; 





      mapView = (MapView)view.findViewById(R.id.map); 
      Bundle savedInstanceState = null; 
      mapView.onCreate(savedInstanceState); 

       // Gets to GoogleMap from the MapView and does initialization stuff 
       map = mapView.getMap(); 
       map.getUiSettings().setMyLocationButtonEnabled(false); 
       map.setMyLocationEnabled(true); 

       MapsInitializer.initialize(activity); 

       double lat; 
       double lon; 

       lat = Double.parseDouble(theaterDetail.getLatitude()); 
       lon = Double.parseDouble(theaterDetail.getLongitude()); 

       // Updates the location and zoom of the MapView 
       map.addMarker(new MarkerOptions().position(
         new LatLng(lat, lon)).title(theaterDetail.getAddress())); 

       final LatLng THEATER_POSITION = new LatLng(lat, lon); 

       CameraPosition cameraPosition = new CameraPosition.Builder() 
         .target(THEATER_POSITION) // Sets the center of the map to 
                // THEATER_POSITION 
         .zoom(10) // Sets the zoom 
         .bearing(360) // Sets the orientation of the camera to east 
         .tilt(30) // Sets the tilt of the camera to 30 degrees 
         .build(); // Creates a CameraPosition from the builder 
         map.animateCamera(CameraUpdateFactory 
         .newCameraPosition(cameraPosition)); 

XML

<com.google.android.gms.maps.MapView 
      android:id="@+id/map" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="1"/> 

清單

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.***.***" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="18" /> 

    <uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 

    <uses-feature 
     android:glEsVersion="0x00020000" 
     android:required="true" 
     /> 

    <permission 
    android:name="com.***.***.permission.MAPS_RECEIVE" 
    android:protectionLevel="signature" /> 

    <uses-permission android:name="com.***.***.permission.MAPS_RECEIVE" /> 






    <application 
     android:name="com.***.***.service.CommonVariable" 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppBaseTheme" 
     android:hardwareAccelerated="true" > 

     <meta-data 
    android:name="com.google.android.gms.version" 
    android:value="@integer/google_play_services_version" /> 


     <!-- <uses-library android:name="com.google.android.maps" /> --> 

     <activity 
      android:name="com.***.***.MainActivity" 
      android:label="@string/app_name" 
      android:theme="@style/Theme.Sherlock.Light.DarkActionBar" 
      android:windowSoftInputMode="adjustPan" 
      android:hardwareAccelerated="true"> 
     </activity> 

     <activity 
      android:name="com.***.***.Map" 
      android:label="@string/app_name" 
      android:theme="@style/Theme.Sherlock.Light.DarkActionBar" ></activity> 

     <activity 
      android:name="com.***.***.WelcomeActivity" 
      android:label="@string/app_name" 
      android:theme="@style/Theme.Sherlock.NoActionBar" 
      android:hardwareAccelerated="true" > 
      <intent-filter> 

       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <meta-data 
        android:name="com.google.android.maps.v2.API_KEY" 
        android:value="*********************" /> 


    </application> 

</manifest> 
+0

上面的代碼在java類中,您正在寫哪些函數?以及爲什麼你要調用這個函數mapView.onCreate(savedInstanceState);? – EagleEye

+0

我的mapview代碼被放置在一個asyncTask中,我就這樣調用它。 \t \t如果(頁面== Element.THEATER_DETAIL.getType()){ \t \t \t視圖= inflater.inflate(R.layout.filmhall,容器,FALSE); \t \t \t Theatre theater =(Theatre)item.get(position); \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t新的背景((theater.getTheaterId()),視圖).execute(); \t \t \t \t \t} – CraZyDroiD

+0

@EagleEye你有解決方案嗎? – CraZyDroiD

回答

0

Java文件

package com.dilip.googlemapsv2; 

import com.google.android.gms.common.GooglePlayServicesUtil; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.MapFragment; 

import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.Toast; 

public class MainActivity extends FragmentActivity { 

    // Google Map 
    private GoogleMap googleMap; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     try { 
      // Loading map 
      initilizeMap(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 



    /** 
    * function to load map. If map is not created it will create it for you 
    * */ 
    private void initilizeMap() { 
     if (googleMap == null) { 
      //googleMap = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap(); 
      googleMap = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap(); 

      // check if map is created successfully or not 
      if (googleMap == null) { 
       Toast.makeText(getApplicationContext(),"Sorry! unable to create maps", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     GooglePlayServicesUtil.isGooglePlayServicesAvailable(this.getApplicationContext()); 
     initilizeMap(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

XML頁面代碼

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 


    <fragment 
     android:id="@+id/map" 

     android:name="com.google.android.gms.maps.MapFragment"  
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 



</RelativeLayout> 

Mainfest文件

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.dilip.googlemapsv2" 
    android:versionCode="1" 
    android:versionName="1.0" > 
    <permission 
     android:name="com.dilip.googlemapsv2.permission.MAPS_RECEIVE" 
     android:protectionLevel="signature" /> 

    <uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="20" /> 
    <uses-permission android:name="com.dilip.googlemapsv2.permission.MAPS_RECEIVE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 



      <uses-feature android:glEsVersion="0x00020000" 
       android:required="true"/> 



    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <!-- Goolge API Key --> 
     <meta-data 
      android:name="com.google.android.maps.v2.API_KEY" 
      android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxx" />    /* Added Bi Dilip */ 
     <meta-data 
      android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" /> 
    </application> 

</manifest> 
+1

你能解釋你做了什麼嗎? – CraZyDroiD

+0

上面的代碼工作正常....什麼是你的錯誤,請告訴我你的logcat ... – Dilip

+0

你正在使用MapFragment ..我正在做一個MapView – CraZyDroiD

19

儘管這是一個老問題,我提供我這邊什麼工作。這個解決方案工作的原因是它覆蓋了onResume()處理程序。如果您正在使用mapView,則需要從onResume()處理函數調用mapView.onResume()。示例:

@Override 
public void onResume() { 
    mMapView.onResume(); 
    super.onResume(); 
} 
+0

你是我的英雄!這正是我需要解決上述問題的解決方案! – Burkely91

+2

正是我在找的東西。另請注意,您需要掛鉤onPause()和onLowMemory()方法。感謝你! – Grime

+0

你幫了我很多,解決了這個問題!英雄。 –

相關問題