2016-03-21 4 views
0

カスタムマーカーを使用してアンドロイドマップビューを実装しています。私はマーカービューに画像を読み込むためにピカソを使用しています。しかし、マップは、私に必要なマーカーを私に示していません。カスタムマップマーカーポイントがピカソでロードされていません

ここに私のコードここ

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

画像マーカをロードするためのコードです。 if(i.getBooleanExtra("maps", true))を実装しています。このマップビューにつながる2つのアクティビティがあるためです。直前のアクティビティが真の値を入力した場合は、マーカーデータが1つだけ表示されます。しかし、値がfalseの場合、すべてのマーカーデータが表示されます。 mapsviewは、偽の価値をもたらす以前の活動から得たものであれば、私が必要としていたすべてのマーカーを表示します。しかし、実際の価値をもたらす活動から得たものであれば、mapsviewは私にマーカーを表示しません。

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

ここで私は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); 
     } 
    }); 

ここplotMarkersここで間違って何

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クラス

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) { 
    } 
} 

の方法がありますを呼び出す方法についてのコードですか?

ありがとうございました。

+0

のように私のコードを変更: '場合(i.getBooleanExtra(「マップ」、真))'と私はまだそれが何の目的であるかわからないのですか?なぜあなたはその価値をチェックしているあなたの投稿に含めることができますか? –

+0

私のポストをもう一度チェックしてください。 –

+0

'MapsActivity'の呼び出し方法にコードスニペットを含めることができますか?また、 'if(i.getBooleanExtra(" maps "、true))'をどこで呼び出していますか? 'onCreate()'では.. –

答えて

0

ハンドラーを使用してマーカーを表示するには少し時間がかかります。だから私は、私はあなたの以前の記事で、この場合の状態を見てきたこの

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

そしてこの

Runnable UI_UPDATE_RUNNABLE = new Runnable() { 
    @Override 
    public void run() { 
     plotMarkers(mMyMarkersArray); 
    } 
}; 
関連する問題