我尝试了几种解决方案,但我并不满意.
在第一个中,我只是乘以或除以半径:
@OverrIDepublic voID onCameraChange(Cameraposition position) { if(prevIoUsZoom > position.zoom) { mSelectionCircle.seTradius(Math.abs(position.zoom - prevIoUsZoom)*2*mSelectionCircle.geTradius()); } else if(prevIoUsZoom < position.zoom) { mSelectionCircle.seTradius(Math.abs(position.zoom - prevIoUsZoom)*mSelectionCircle.geTradius()/2); } prevIoUsZoom = position.zoom;}
它似乎首先起作用,但在快速缩放或用手指缩放时会产生错误的结果.此外,缩放在屏幕上清晰可见.
我的第二个解决方案使用像素计转换.这个想法是在缩放/不变时重新计算以米为单位的半径,因此圆圈在屏幕上具有恒定的大小.为此,我在屏幕上显示Circle的当前位置:
Point p1 = mMap.getProjection().toScreenLocation(mSelectionCircle.getCenter());
然后我创建另一个位于圆的边缘的点:
Point p2 = new Point(p1.x + radiusInPixels,p1.y);
哪里
int radiusInPixels = 40;
之后,我使用一个函数返回这两个点之间的距离,以米为单位.
private double convertPixelsToMeters(Point point1,Point point2) { double angle = Math.acos(Math.sin(point1.x) * Math.sin(point2.x) + Math.cos(point1.x) * Math.cos(point2.x) * Math.cos(point1.y- point2.y)); return angle * Math.PI * 6378100.0; // distance in meters}
6378100是地球平均半径.最后,我设置了Circle的新半径:
mSelectionCircle.seTradius(convertPixelsToMeters(p1,p2));
它应该在理论上工作,但我得到荒谬的半径值(10 ^ 7米!).转换功能可能有误?
那么有一种更简单的方法可以做到这一点,或者如果没有,你可以帮助我理解为什么我的第二个解决方案不起作用吗?
谢谢!
解决方法 请使用标记的自定义图标.您可以创建Bitmap和Canvas,在后者上绘制并将其用作Marker图标:new MarkerOptions().icon(BitmapDescriptorFactory.fromBitmap(bitmap))...总结
以上是内存溢出为你收集整理的android – 在Google Maps API v2中在屏幕上绘制恒定大小的圆圈全部内容,希望文章能够帮你解决android – 在Google Maps API v2中在屏幕上绘制恒定大小的圆圈所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)