如何在Android中使用Google地图API V2更改特定区域的颜色

8
我正在开发一个使用Google Maps API v2的Android应用程序,并希望在单击事件上标记地图上的特定区域并用特定颜色进行填充。例如,当我点击印度时,覆盖该国的区域应为绿色。
我已经使用了GroundOverlay,但它需要一个图像来在地图上显示内容,导致着色区域不是很匹配。由于地图和图像都有自己的形状,因此这并不能准确地覆盖到指定区域。
请问有谁能告诉我如何更准确地为Android Google Maps API v2地图着色?

你找到了所需的解决方案吗?请以答案的形式发布。我需要这个。谢谢。 - Qadir Hussain
我也想做类似的事情,但是没有找到任何解决方案。 - Amish
2个回答

4

如MaciejGórski所说,您需要在地图的OnClick事件中使用多边形。因此,我花了一些时间为您提供了一个解决方案。现在,我只在添加了3个点后才绘制多边形,您可以修改它以满足您的需求,并更改颜色(使用RGBA颜色来突出显示多边形内部的区域)。

package com.mzubair.mapkey;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.widget.TextView;

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMapClickListener;
import com.google.android.gms.maps.GoogleMap.OnMapLongClickListener;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Polygon;
import com.google.android.gms.maps.model.PolygonOptions;

public class MainActivity extends FragmentActivity implements OnMapClickListener, OnMapLongClickListener {

private GoogleMap googleMap;
private TextView tapTextView;
private PolygonOptions polygonOptions;
private Polygon polygon;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tapTextView = (TextView) findViewById(R.id.textView1);
    polygonOptions = new PolygonOptions();


    // Getting reference to the SupportMapFragment of activity_main.xml
    SupportMapFragment fm = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);

                // Getting GoogleMap object from the fragment
                googleMap = fm.getMap();

                setUpMap();

}

 private void setUpMap() //If the setUpMapIfNeeded(); is needed then...
    {
        googleMap.setOnMapClickListener((OnMapClickListener) this);
        googleMap.setOnMapLongClickListener((OnMapLongClickListener) this);
    }

 @Override
    public void onMapClick(LatLng point) {
        tapTextView.setText("tapped, point=" + point);
        polygonOptions.add(point);
        countPolygonPoints();
    }

    @Override
    public void onMapLongClick(LatLng point) {
        tapTextView.setText("long pressed, point=" + point);
    }
    public void countPolygonPoints(){
        if(polygonOptions.getPoints().size()>3){



            polygonOptions.strokeColor(Color.RED);
            polygonOptions.strokeWidth((float) 0.30);
            polygonOptions.fillColor(Color.BLUE);
            polygon = googleMap.addPolygon(polygonOptions);

        }
    }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

使用此代码后,这是结果。

详细阅读 帖子并在此处下载演示应用程序

enter image description here


能否获取特定国家的边界?例如,当我点击印度时,我需要将整个印度标记出来。这是否可能?@Neo - Venkat

0

你需要将构成这个形状的所有点作为LatLngsList收集起来,并使用{{link1:Polygon}}。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接