[英]How to draw circle around a pin using Google MAps API v2
我正在為我的Android應用程序使用新的API(谷歌地圖API V2),我已經完成了創建地圖並添加標記,現在我的任務是手動創建一個圍繞任何標記的圓圈,我也想提供一個用戶可以相應地增加該圓的半徑的功能,為此我給了一個條,當用戶增加該條時,圓的半徑將增加,反之亦然。
如果有人知道如何使用谷歌地圖API V2,請幫忙,
謝謝
我也一直在努力,我找到了以下解決方案。 它仍然不完美,因為我必須制作一個非常大的畫布,以防止圓圈邊緣變得模糊。
private void addCircleToMap() {
// circle settings
int radiusM = // your radius in meters
double latitude = // your center latitude
double longitude = // your center longitude
LatLng latLng = new LatLng(latitude,longitude);
// draw circle
int d = 500; // diameter
Bitmap bm = Bitmap.createBitmap(d, d, Config.ARGB_8888);
Canvas c = new Canvas(bm);
Paint p = new Paint();
p.setColor(getResources().getColor(R.color.green));
c.drawCircle(d/2, d/2, d/2, p);
// generate BitmapDescriptor from circle Bitmap
BitmapDescriptor bmD = BitmapDescriptorFactory.fromBitmap(bm);
// mapView is the GoogleMap
mapView.addGroundOverlay(new GroundOverlayOptions().
image(bmD).
position(latLng,radiusM*2,radiusM*2).
transparency(0.4f));
}
- 編輯 - Google更新了API。 您現在可以輕松地在地圖中添加圓圈: https : //developers.google.com/maps/documentation/android/shapes?hl = nn #circles
Google在地圖v2中制作的很簡單。 下面的代碼段演示了繪圖標記和圓圈以及更新它們的位置。
private Circle mCircle;
private Marker mMarker;
private GoogleMap mGoogleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGoogleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.mapFragment)).getMap();
mGoogleMap.setMyLocationEnabled(true);
mGoogleMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {
@Override
public void onMyLocationChange(Location location) {
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
if(mCircle == null || mMarker == null){
drawMarkerWithCircle(latLng);
}else{
updateMarkerWithCircle(latLng);
}
}
});
}
private void updateMarkerWithCircle(LatLng position) {
mCircle.setCenter(position);
mMarker.setPosition(position);
}
private void drawMarkerWithCircle(LatLng position){
double radiusInMeters = 100.0;
int strokeColor = 0xffff0000; //red outline
int shadeColor = 0x44ff0000; //opaque red fill
CircleOptions circleOptions = new CircleOptions().center(position).radius(radiusInMeters).fillColor(shadeColor).strokeColor(strokeColor).strokeWidth(8);
mCircle = mGoogleMap.addCircle(circleOptions);
MarkerOptions markerOptions = new MarkerOptions().position(position);
mMarker = mGoogleMap.addMarker(markerOptions);
}
這個更好:
double radiusInMeters = 100.0;
//red outline
int strokeColor = 0xffff0000;
//opaque red fill
int shadeColor = 0x44ff0000;
CircleOptions circleOptions = new CircleOptions().center(position).radius(radiusInMeters).fillColor(shadeColor).strokeColor(strokeColor).strokeWidth(2);
mCircle = map.addCircle(circleOptions);
MarkerOptions markerOptions = new MarkerOptions().position(position);
mMarker = map.addMarker(markerOptions);
也許可以幫到你:
GoogleMap map;
// ... get a map.
// Add a circle in Sydney
Circle circle = map.addCircle(new CircleOptions()
.center(new LatLng(-33.87365, 151.20689))
.radius(10000)
.strokeColor(Color.RED)
.fillColor(Color.BLUE));
從這里 :
使用此方法,您可以選擇任何標記,它將為特定標記創建圓形對象。 您可以通過將標記對象和半徑值傳遞給createCircle()方法來動態更改圓的半徑。
private GoogleMap mMap;
/*Create circle objects*/
Circle currentCircle;
/**
* create circle when user want to set region
* @param currentMarker this is user selected marker
* @param radius pass radius value to circle object
*/
private void createCircle(Marker currentMarker ,Double radius){
//check circle is exist or not
//if exist remove
if(currentCircle!=null){
currentCircle.remove();
}
currentCircle=mMap.addCircle(new CircleOptions().center(currentMarker.getPosition()).radius(radius)
.strokeColor(Color.parseColor("#FF007A93"))
.fillColor(Color.parseColor("#40007A93"))
.strokeWidth(2));
float zoomLevel = getZoomLevel(radius);
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(currentMarker.getPosition(), zoomLevel));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.