2016-03-21 21 views
0

Özel işaretleyici ile Android Mapview uygulamıyorum. Görüntüyü işaretçi görünümüne yüklemek için picasso kullanıyorum. Fakat haritalar bana ihtiyaç duyduğum işareti göstermiyor.Özel harita işaretleyici ile resim yüklenmedi.

İşte benim İşte kod

i = getIntent(); 
    if(i.getBooleanExtra("maps", true)) { 
     mactionBar.setSubtitle(i.getStringExtra("nama")); 
     mMyMarkersArray.add(new MyMarker(i.getStringExtra("nama"), i.getStringExtra("deskripsi"), i.getStringExtra("foto"), i.getStringExtra("marker"), Double.parseDouble(i.getStringExtra("lat")), Double.parseDouble(i.getStringExtra("lng")))); 
     plotMarkers(mMyMarkersArray); 
    } 

görüntü işaretleyici yüklemek için kod. Bu harita görünümüne yol açan iki etkinlik olduğu için if(i.getBooleanExtra("maps", true)) uyguluyorum. Bir önceki etkinlik gerçek bir değer koyduysa, o zaman sadece bir işaretçi verisi getirecektir. Ancak değer yanlışsa, tüm işaretçi verilerini getirir. Haritalar görünümünde, yanlış değer getiren önceki etkinlikten elde ettiğimde ihtiyaç duyduğum tüm işaretçileri gösterir. Ancak, harita görünümü, gerçek değeri getiren etkinlikten elde edilmişse bana bir işaretçi göstermez.

public void plotMarkers(ArrayList<MyMarker> markers) { 
    if(markers.size() > 0) { 
     for (MyMarker myMarker : markers) 
     { 
      markerOption = new MarkerOptions().position(new LatLng(myMarker.getmLatitude(), myMarker.getmLongitude())); 
      location_marker = mMap.addMarker(markerOption); 
      Target target = new PicassoMarker(location_marker); 
      targets.add(target); 
      Picasso.with(MapsActivity.this).load(myMarker.getmIcon()).resize(84, 125).into(target); 
      mMarkersHashMap.put(location_marker, myMarker); 

      i = getIntent(); 
      if(i.getBooleanExtra("maps", true)) { 
       buttonNavigasi.setVisibility(View.VISIBLE); 

       location_marker.setTitle(i.getStringExtra("nama")); 
       dest = new LatLng(myMarker.getmLatitude(), myMarker.getmLongitude()); 
       mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(dest, 16)); 
      } 
      else { 
       mMap.setInfoWindowAdapter(new MarkerInfoWindowAdapter()); 
      } 
     } 
    } 
} 

İşte ben MapsActivity

buttonNavigasi = (AppCompatButton) findViewById(R.id.button2); 
    buttonNavigasi.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(DetailActivity.this,MapsActivity.class); 
      i.putExtra("nama", daftarNama); 
      i.putExtra("deskripsi", daftarDeskripsi); 
      i.putExtra("foto", daftarFoto); 
      i.putExtra("marker", daftarMarker); 
      i.putExtra("lng", daftarLng); 
      i.putExtra("lat", daftarLat); 
      i.putExtra("maps", true); 
      startActivity(i); 
     } 
    }); 

İşte plotMarkers burada sorun ne

public void plotMarkers(ArrayList<MyMarker> markers) { 
    if(markers.size() > 0) { 
     for (MyMarker myMarker : markers) 
     { 
      markerOption = new MarkerOptions().position(new LatLng(myMarker.getmLatitude(), myMarker.getmLongitude())); 
      location_marker = mMap.addMarker(markerOption); 
      Target target = new PicassoMarker(location_marker); 
      targets.add(target); 
      Picasso.with(MapsActivity.this).load(myMarker.getmIcon()).resize(84, 125).into(target); 
      mMarkersHashMap.put(location_marker, myMarker); 

      i = getIntent(); 
      if(i.getBooleanExtra("maps", true)) { 
       buttonNavigasi.setVisibility(View.VISIBLE); 

       location_marker.setTitle(i.getStringExtra("nama")); 
       dest = new LatLng(myMarker.getmLatitude(), myMarker.getmLongitude()); 
       mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(dest, 16)); 
      } 
      else { 
       mMap.setInfoWindowAdapter(new MarkerInfoWindowAdapter()); 
      } 
     } 
    } 
} 

PicassoMarker sınıf

public class PicassoMarker implements Target { 
Marker mMarker; 

    PicassoMarker(Marker marker) { 
     mMarker = marker; 
    } 

    @Override 
    public int hashCode() { 
     return mMarker.hashCode(); 
    } 

    @Override 
    public boolean equals(Object o) { 
     if(o instanceof PicassoMarker) { 
      Marker marker = ((PicassoMarker) o).mMarker; 
      return mMarker.equals(marker); 
     } else { 
      return false; 
     } 
    } 

    @Override 
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
     mMarker.setIcon(BitmapDescriptorFactory.fromBitmap(bitmap)); 
    } 

    @Override 
    public void onBitmapFailed(Drawable errorDrawable) { 
    } 

    @Override 
    public void onPrepareLoad(Drawable placeHolderDrawable) { 
    } 
} 

yöntemi var diyoruz nasıl kod?

Teşekkürler.

+0

bunu görmüştüm: 'if (i.getBooleanExtra ("haritalar", true))' ve Amacın ne olduğundan emin değil miyim? Gönderinize neden bu değeri kontrol ettiğinizi ekleyebilir misiniz? –

+0

Gönderiyi tekrar kontrol et. –

+0

Kod snippet'ini "MapsActivity" olarak adlandırdığınıza ekleyebilir misiniz? Ayrıca, 'if (i.getBooleanExtra ("maps", true)) 'ı nereye çağırıyorsunuz? 'OnCreate() 'da umarım .. –

cevap

0

İşaretleyicileri biraz gecikme ile göstermek için İşleyiciyi kullanıyorum. O yüzden bu

i = getIntent(); 
if(i.getBooleanExtra("maps", true)) { 
    ActionBar mactionBar = getSupportActionBar(); 
    mactionBar.setSubtitle(i.getStringExtra("nama")); 
    buttonNavigasi.setVisibility(View.VISIBLE); 
    mMyMarkersArray.add(new MyMarker(i.getStringExtra("nama"), i.getStringExtra("deskripsi"), i.getStringExtra("foto"), i.getStringExtra("marker"), Double.parseDouble(i.getStringExtra("lat")), Double.parseDouble(i.getStringExtra("lng")))); 

    Handler UI_HANDLER = new Handler(); 
    UI_HANDLER.postDelayed(UI_UPDATE_RUNNABLE, 500); 
} 

gibi benim kodunu değiştirmek Ve önceki sonrası durum ise bu

Runnable UI_UPDATE_RUNNABLE = new Runnable() { 
    @Override 
    public void run() { 
     plotMarkers(mMyMarkersArray); 
    } 
}; 
İlgili konular