我必须在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>
请让我知道如何识别用户是否点击了我绘制的圆圈内部/外部。
谢谢
答案 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的代码。