2016-03-28 8 views
1

2つのマーカーを囲むGoogleマップに色合いを適用したいとします。これまでのところ私が得た唯一の作業溶液は、実際にGoogleMapsで色を追加

createRectangle()はしかし作成 https://github.com/googlemaps/android-samples/blob/master/ApiDemos/app/src/main/java/com/example/mapdemo/PolygonDemoActivity.java

private List<LatLng> createRectangle(LatLng center, double halfWidth, double halfHeight) { 
    return Arrays.asList(new LatLng(center.latitude - halfHeight, center.longitude - halfWidth), 
     new LatLng(center.latitude - halfHeight, center.longitude + halfWidth), 
     new LatLng(center.latitude + halfHeight, center.longitude + halfWidth), 
     new LatLng(center.latitude + halfHeight, center.longitude - halfWidth), 
     new LatLng(center.latitude - halfHeight, center.longitude - halfWidth)); 
} 

からオーバーレイが全体マッププレビュー map previewをカバーしていない方法である

map.addPolygon(new PolygonOptions() 
       .addAll(createRectangle(SphericalUtil.interpolate(markerData.getStartPoint(), markerData.getEndPoint(), CENTER_POINT_INTERPOLATE), 90, 45)) 
       .strokeColor(Color.TRANSPARENT) 
       .fillColor(resources.getColor(R.color.tint_black_40))); 

として地図上にポリゴンを描画することです。誰もが既存のアプローチを改善するために私を助けることができるか、これに対処するより良い方法を提案するか?

+0

したがって、半透明の色でフルマップをカバーする必要がありますか? – antonio

答えて

1

TileOverlayを作成して(zIndexに応じてマーカーの上または下に)マップに追加することができます。

考えてみると、地図上に描かれる画像は非常に小さい(例では2x2ピクセル)TileProviderです。パフォーマンスを確保するため、TileProviderで返されたTileは常に同じです。あなたは次のようにマップにTileOverlayを追加する必要があります

public class BackgroundTileProvider implements TileProvider { 
    private Tile tile; 

    @Override 
    public Tile getTile(int x, int y, int zoom) { 
     if (tile == null) { 
      // Create a very small (for performance) bitmap with alpha 
      Bitmap bmp = Bitmap.createBitmap(2, 2, Bitmap.Config.ARGB_8888); 

      // Draw the desired color to use as background 
      Canvas canvas = new Canvas(bmp); 
      canvas.drawColor(Color.argb(150, 0, 0, 0)); 

      // Get the bytes and create the Tile 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 

      tile = new Tile(2, 2, stream.toByteArray()); 
     } 

     return tile; 
    } 
} 

TileProvider tileProvider = new BackgroundTileProvider(); 
TileOverlay tileOverlay = map.addTileOverlay(
    new TileOverlayOptions().tileProvider(tileProvider)); 
+0

ありがとう@antonioこれはいくつかの拡張にはたらきました。以前に添付されたスクリーンショットのように、マップの右側に色付けされました。しかし、左側には着色されていないストリップがあります。 'animateCamera'の後にマップレンダリングと関係しているようです。地味な地図の初期レンダリングは問題ありません。中央に置いてズームするだけで、左側が色づけされたタイルを塗りつぶします。それにもかかわらず、私を助けてくれました。 Thanx –

+0

それは奇妙です。デバイスで問題を再現できません。コードの関連部分を共有できますか?特に私は地図の初期化(カメラの移動など)を使ってテストしたいと思います。 – antonio

1

色合い効果を持つポリゴンを作成するために不可欠なコードを書き留めるここ

はコードです。

private PolygonOptions mPolygonOptions; 
private GoogleMap mGoogleMap; 
private SupportMapFragment mMapFragment; 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mPolygonOptions = new PolygonOptions(); 
    } 
@Override 
    protected void onResume() { 
     super.onResume(); 
     if(mGoogleMap == null) { 
      mMapFragment = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.locationtrackmap)); 
      mGoogleMap = mMapFragment.getMap(); 
      mPolygonOptions.add(new LatLng(latitudeLongitude.One,latitudeLongitude.One)); 
      mPolygonOptions.add(new LatLng(latitudeLongitude.Two,latitudeLongitude.Two)); 
      mPolygonOptions.add(new LatLng(latitudeLongitude.Three,latitudeLongitude.Three)); 
      mPolygonOptions.add(new LatLng(latitudeLongitude.One,latitudeLongitude.One)); 
      mPolygonOptions.strokeColor(Color.RED); 
      mPolygonOptions.strokeWidth(5); 
      mPolygonOptions.fillColor(0x220000FF); 
      mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(LatLon_to_focus, 14.0f)); 
       mGoogleMap.addPolygon(mPolygonOptions);} 
    } 
関連する問題