我正在Google地图上绘制多边形,效果很好.我需要将该多边形保存为固定比例的位图.我正在使用此代码来做到这一点.
private static List<Point> scalepolygonPoints(List<LatLng> points,float scale,Projection projection) { List<Point> scaledPoints = new ArrayList(points.size()); LatLng polygonCenter = getpolygonCenterPoint(points); Point centerPoint = projection.toScreenLocation(polygonCenter); for (int i=0; i < points.size(); i++) { Point screenposition = projection.toScreenLocation(points.get(i)); screenposition.x = (int) (scale * (screenposition.x - centerPoint.x) + centerPoint.x); screenposition.y = (int) (scale * (screenposition.y - centerPoint.y) + centerPoint.y); scaledPoints.add(screenposition); } return scaledPoints;}private static LatLng getpolygonCenterPoint(List<LatLng> polygonPointsList){ LatLng centerLatLng = null; LatLngBounds.Builder builder = new LatLngBounds.Builder(); for(int i = 0; i < polygonPointsList.size() ; i++) { builder.include(polygonPointsList.get(i)); } LatLngBounds bounds = builder.build(); centerLatLng = bounds.getCenter(); return centerLatLng;}
然后创建位图
private Bitmap createpolylineBitmap(List<Point> scaledPoints) { Bitmap bitmap = Bitmap.createBitmap(800,600,Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); Paint paint = new Paint(); paint.setcolor(ContextCompat.getcolor(this,R.color.black)); paint.setstrokeWIDth(10); paint.setDither(true); paint.setStyle(Paint.Style.stroke); paint.setstrokeJoin(Paint.Join.ROUND); paint.setstrokeCap(Paint.Cap.ROUND); paint.setAntiAlias(true); for (int i = 0; i < scaledPoints.size(); i++) { try { canvas.drawline(scaledPoints.get(i).x,scaledPoints.get(i).y,scaledPoints.get(i + 1).x,scaledPoints.get(i + 1).y,paint); } catch(Exception ex){ canvas.drawline(scaledPoints.get(i).x,scaledPoints.get(0).x,scaledPoints.get(0).y,paint); } } return bitmap; }
问题在于该方法使用屏幕投影,并且当用户更改缩放或拖动贴图时,它将更改位图上的多边形位置或其边界.如何不依赖缩放或相机位置而在所有设备上绘制相同尺寸的多边形?
编辑:
因此,基本上我设法在将多边形缩放贴图保存到位图之前在正确的位置获得了正确的尺寸.但是问题是当我使用具有不同分辨率的设备时,多边形的大小也在变化.如何预防呢?最佳答案一个可能适合您的聪明技巧-为什么在用户尝试保存地理围栏时不手动缩放相机以适合多段线.
val latLngs = getLatLngs() val builder = LatLngBounds.Builder() latLngs.forEach { builder.include(it.position) } val padding = 200 val bounds = builder.build() val cameraUpdate = CameraUpdateFactory.newLatLngBounds(bounds,padding) map.moveCamera(cameraUpdate) //Do your projection operation here...
总结 以上是内存溢出为你收集整理的Android将地图中的多边形保存为所有设备的相同大小的位图 全部内容,希望文章能够帮你解决Android将地图中的多边形保存为所有设备的相同大小的位图 所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)