通过点击谷歌地图创建圈子,如果用户在android中点击外圈,则删除圈子

时间:2015-12-09 05:32:17

标签: android google-maps-android-api-2

enter image description here

我必须在android中开发上面的图片,已在iOS中实现。

在功能下面描述,最初的地图将显示在主要活动中。

如果用户点击圈内圆圈将保持相同,如果用户点击圆圈外应该删除圆圈。如果屏幕上没有圆圈,现在如果用户点击屏幕圈,则应再次显示。如果用户放大/缩小,则圆圈应始终位于中心。

如果用户点击圆圈,我会绘制圆圈并使其不可见。但如果我点击圈子周围没有调用onclicklistener,而是调用camerachange监听器。

这是我的Activity类

      public class MainActivity extends FragmentActivity  implements OnMapReadyCallback,Response,OnMapClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    GoogleMap map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
            .getMap();
    highlightMap(map,0x110000FF);
}


public static void highlightMap(final GoogleMap map, int fillColor) {

    if (map != null) {

        MarkerOptions options = new MarkerOptions();
        options.position(getCoords(17.3700, 78.4800,map)).anchor(0.5f, 0.5f);
        options.icon(BitmapDescriptorFactory.fromBitmap(getBitmap(17.3700,78.4800,fillColor)));
        options.alpha(1);

        final Marker marker = map.addMarker(options);
        marker.setDraggable(true);

        // I used this listener to make align the circle center
        map.setOnCameraChangeListener(new OnCameraChangeListener() {

            @Override
            public void onCameraChange(CameraPosition paramCameraPosition) {
                LatLng centerOfMap = map.getCameraPosition().target;
                marker.setPosition(centerOfMap);
            }
        });
    }
}


private static Bitmap getBitmap(double latitude, double longitude, int fillColor) {

    // fill color
    Paint paint1 = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint1.setColor(fillColor);
    paint1.setStyle(Style.FILL);

    // stroke color
    Paint paint2 = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint2.setColor(Color.GRAY);
    paint2.setStyle(Style.STROKE);

    // circle radius - 200 meters
    int radius = 500;

    // create empty bitmap
    Bitmap b = Bitmap
            .createBitmap(radius * 2, radius * 2, Config.ARGB_8888);
    Canvas c = new Canvas(b);

    c.drawCircle(radius, radius, radius, paint1);
    c.drawCircle(radius, radius, radius, paint2);

    return b;
}

private static LatLng getCoords(double lat, double lng,GoogleMap map) {
    LatLng latLng = new LatLng(lat, lng);

    Projection proj = map.getProjection();
    Point p = proj.toScreenLocation(latLng);
    p.set(p.x, p.y + 0);

    return proj.fromScreenLocation(p);
  }

@Override
public void onMapClick(LatLng arg0) {
    if(circleMarker.isVisible()){
        circleMarker.setVisible(false);
    }else{
        circleMarker.setVisible(true);
    }

}

这是我的xml文件

   <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
tools:context="com.naveen.myfirstapp.MainActivity" >

<fragment
    android:id="@+id/map"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="86dp"
    class="com.google.android.gms.maps.MapFragment" />

<ImageView
    android:id="@+id/calndar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="33dp"
    android:src="@drawable/calendar" />

<ImageView
    android:id="@+id/citylifeLogo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="150dp"
    android:src="@drawable/cytilife_logo" />

<ImageView
    android:id="@+id/sunLogo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="280dp"
    android:layout_marginTop="33dp"
    android:src="@drawable/sun" />
 </FrameLayout>

请让我知道如何识别用户是否点击了我绘制的圆圈内部/外部。

谢谢

2 个答案:

答案 0 :(得分:1)

我正在思考,我有个主意,好吧...... 您创建一个Map.setOnMapClickListener 如果有一个圆圈,你点击地图(圆圈外)...你删除/隐藏圆圈......

你需要使用一个var boolean来指定有一个圆圈......

圈圈;

if(mMap != null) {

  mMap.setOnMapLongClickListener(new
           GoogleMap.OnMapClickListener() {
        @Override
        public void onMapClick (LatLng latLng){

          if(circle!=null)
           {
              circle.remove();
              circle.setVisible(false);
            }else{
                circle = map.addCircle(new CircleOptions()
               .center(new LatLng(-33.87365, 151.20689))
               .radius(10000)
               .strokeColor(Color.RED)
               .fillColor(Color.BLUE));
            }
        }
     });

抱歉我的英文

答案 1 :(得分:0)

我无法正确回答您的问题,但仍在尝试...... 你不能做出褪色的&#34; Imageview与匹配父级作为高度和宽度漫游者的地图。 并在centreInParent设置圆形透明图像。 然后,您可以管理点击此圆形图像视图。

您可以发布mapClicklistner的代码。