30.5.12

Masalah Peta Aplikasi di Android : Muncul Kotak Kosong Saat Switching Ke Map Mode

Bingung sama Judulnya? :D
Begini ceritanya, saat membuat peta di Android dengan mode Map, kemudian kita beri menu untuk berpindah mode peta, yaitu Mode Street (Map) dan Satelit.
Awalnya pada mode Map, masih biasa-biasa saja, kemudian berpindah ke mode Satelit, tetap normal. Setelah dipindah ke mode Map lagi, dan peta di geser, disinilah letak masalahnya, peta terkotak-kotak kosong. Entah apa yang salah, ilmuku belum nyampe.
Ini gambarnya:
itu ada kotak2 kosong dengan tanda silang
Kalo ada yang paham, bagi-bagi ilmunya ya.. :)
Ini kalo mau liat Source Codenya.
package com.arliando.mapdashboard;

import java.util.Iterator;
import java.util.List;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.OverlayItem;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class PetaActivity extends MapActivity {

 private MapView mapView;
 private LocationManager locManager;
 private LocationListener locListener;

 // Dipanggil saat pertamakali Aplikasi dijalankan
 public void onCreate(Bundle saveInstanceState) {
  super.onCreate(saveInstanceState);
  setContentView(R.layout.peta_layout);
  mapView = (MapView) findViewById(R.id.mapView);

  initMap();
  initLocation();

 }

 private void initLocation() {
  // TODO Auto-generated method stub
  locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
  locListener = new LocationListener() {

   @Override
   public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
    // TODO Auto-generated method stub

   }

   @Override
   public void onProviderEnabled(String arg0) {
    // TODO Auto-generated method stub

   }

   @Override
   public void onProviderDisabled(String arg0) {
    // TODO Auto-generated method stub

   }

   @Override
   public void onLocationChanged(Location newLocation) {
    // Dijalankan Apabila Koordinat berubah
    tampilkanPosisiKeMap(newLocation);

   };

   private void tampilkanPosisiKeMap(Location newLocation) {
    List overlays = mapView.getOverlays();

    // 1. Remove Old Overlay
    if (overlays.size() > 0) {
     for (Iterator iterator = overlays.iterator(); iterator.hasNext();) {
      iterator.next();
      iterator.remove();

     }

    }

    // 2. transform the location to a geopoint
    GeoPoint geopoint = new GeoPoint(
      (int) (newLocation.getLatitude() * 1E6),
      (int) (newLocation.getLongitude() * 1E6));

    // 3. initialize icon
    Drawable icon = getResources().getDrawable(R.drawable.market);
    icon.setBounds(0, 0, icon.getIntrinsicWidth(),
      icon.getIntrinsicHeight());

    // 4. Buat Overlay dan menampilkannya
    MyItemizedOverlay overlay = new MyItemizedOverlay(icon);
    OverlayItem item = new OverlayItem(geopoint, "My Location ",null);
    overlay.addItem(item);
    mapView.getOverlays().add(overlay);

    // 5. Pindah Ke Lokasi
    mapView.getController().animateTo(geopoint);

    // 6. Redraw Map
    mapView.postInvalidate();

   }
  };
  locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 1000, locListener);

 }

 public void initMap() {
  // TODO Auto-generated method stub
  // zoom peta
  mapView = (MapView) findViewById(R.id.mapView);
  mapView.setBuiltInZoomControls(true);
  mapView.getController().setZoom(15);

  // mapView.setStreetView(isLocationDisplayed()); <--barusan di comment

 }

 @Override
 protected boolean isRouteDisplayed() {
  // TODO Auto-generated method stub
  return false;
 }

 public boolean onCreateOptionsMenu(Menu menu) {
  super.onCreateOptionsMenu(menu);
  // MenuInflater oMenu = getMenuInflater();
  // oMenu.inflate(R.id.mapView, menu);

  menu.add(0, 0, 0, "Street Mode");
  menu.add(0, 1, 1, "Satelite Mode");
  return true;
 }

 public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
  case 0:
   mapView.setStreetView(true);
   mapView.setSatellite(false);
   mapView.invalidate();
   return true;

  case 1:
   mapView.setSatellite(true);
   mapView.setStreetView(false);
   mapView.invalidate();
   return true;
  }
  return false;
 }

}

Share:

9 comments :

  1. masalahnya sama nih.punya gw udah ga kotak2 lagi setelah setStreetView diapus. cmiiw.

    switch (item.getItemId()) {
    case 0:
    mapView.setSatellite(false);
    mapView.invalidate();
    return true;

    case 1:
    mapView.setSatellite(true);
    mapView.invalidate();
    return true;
    }

    ReplyDelete
    Replies
    1. Terimakasih Mbak Dita udah berbagi ilmunya.. :)
      Berhasil... Alhamdulillaah..

      Delete
    2. klo map nya ga muncul trus yang kliatan cuma kotak kotak aja (ga berbentuk map sma skali) itu gmn ya?

      Delete
  2. maaf mengganggu saya hanya ingin berbagi artikel yang berkaitan tentang pencarian lokasi dengan android
    berikut linknya :
    http://repository.gunadarma.ac.id/bitstream/123456789/1105/1/50407046.pdf
    semoga membantu :)

    ReplyDelete
    Replies
    1. Thank Gan, btw Aplikasinya ga dimasukin di Play Store gan?

      Delete
  3. ko' saya malah ga nongol petanya yaa mba n mas broh??
    mohon pencerahannya donk..

    ReplyDelete
    Replies
    1. Masalahnya dimana Gan? Coba periksa Logcatnya..

      Delete
  4. gan saya tanya,,peta ku tdk muncul,hanya muncul kotak2 putih saja,,itu bagaimana solusinya gan???

    ReplyDelete
    Replies
    1. Cek package namenya yang di android manifest gan, yang ada permission udah pas atau belum sm package yang berisi activity untuk nampilin petanya?

      Delete

Mari komentar dan berdiskusi...