Androidプログラマへの道 〜 Moonlight 明日香 〜 - 図形の重なり順番を指定する

Google Maps Android API v2

Googleマップに図形(Polygon, Polyline)を描画する順番(重なり順番)を指定するには, PolygonOptionsクラスまたはPolylineOptionsクラスを利用する.

重なり順番の指定

  • MainActivity.java
    • PolygonOptionsのインスタンスを取得する.
    • PolygonOptions#zIndexメソッドで, Z方向の位置を指定する.
   値が大きいものが前面に表示される.
package com.moonlight_aska.android.web.googlemap003;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.PolygonOptions;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class MainActivity extends FragmentActivity {
  private static final LatLng[] AIRPORT =
    { new LatLng(34.785500, 135.438004), // 伊丹
     new LatLng(34.635021, 135.225104), // 神戸
     new LatLng(34.427299, 135.244003) };// 関西
  private static final int[] COLOR = { Color.BLUE, Color.RED, Color.GREEN };
  private static final LatLng OSAKA_STATION = new LatLng(34.702177, 135.495114);
  private static final double WIDTH = 0.30f;
  private static final double HEIGHT = 0.30f;
  private GoogleMap mMap = null;

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

    mMap = ( (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map) ).getMap();
    if (mMap != null) {
      CameraPosition cameraPos = new CameraPosition.Builder()
        .target(OSAKA_STATION).zoom(10.0f)
        .bearing(0).build();
      mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPos));
      // 描画内容の設定
      PolygonOptions[] options = new PolygonOptions[3];
      for (int i=0; i<3; i++) {
        options[i] = new PolygonOptions();
        // 緯度・経度
        options[i].add(AIRPORT[i]);
        options[i].add(new LatLng(AIRPORT[i].latitude+WIDTH, AIRPORT[i].longitude));
        options[i].add(new LatLng(AIRPORT[i].latitude+WIDTH, AIRPORT[i].longitude+HEIGHT));
        options[i].add(new LatLng(AIRPORT[i].latitude, AIRPORT[i].longitude+HEIGHT));
        // 線色
        options[i].strokeColor(COLOR[i]);
        // 塗り色
        options[i].fillColor(COLOR[i]);
        // 重なり順番を逆に設定(数字が大きい方ものを前面に表示)
        options[i].zIndex(10.0f - i);
        mMap.addPolygon(options[i]);
      }
    }
  }
}
  • 動作例

              重なり順番を逆に