对MapView以及其上的子view进行截图。
当用户在地图上绘制了标注点、覆盖物、信息窗口等数据时,利用该截屏功能可以实现包含地图和绘制数据的完整效果的截屏。
核心类/接口
类 | 接口 | 说明 | 版本 |
---|---|---|---|
AMapSearchAPI | - (UIImage *)takeSnapshotInRect:(CGRect)rect; | 在指定区域内截图(默认会包含该区域内的annotationView) | V4.0.0版本起 |
实现截图:
- (void)captureAction
{
// 获取mapView截图
UIImage *mapImage = [self.mapView takeSnapshotInRect:self.mapView.bounds];
// 对resultView进行截图
CGSize s = self.resultView.bounds.size;
UIGraphicsBeginImageContextWithOptions(s, NO, [UIScreen mainScreen].scale);
[self.resultView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// union image
CGSize imageSize = self.mapView.bounds.size;
UIGraphicsBeginImageContextWithOptions(imageSize, NO, [UIScreen mainScreen].scale);
[mapImage drawInRect:self.mapView.bounds];
[resultImage drawInRect:self.resultView.frame];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// show the image
[self transitionToDetailWithImage:image];
}
func captureAction() {
// map image
let mapImage = self.mapView.takeSnapshot(in: self.mapView.bounds)
// result image
let s = self.resultView.bounds.size
UIGraphicsBeginImageContextWithOptions(s, false, UIScreen.main.scale)
self.resultView.layer.render(in: UIGraphicsGetCurrentContext()!)
let resultImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
// union image
let imageSize = self.mapView.bounds.size
UIGraphicsBeginImageContextWithOptions(imageSize, false, UIScreen.main.scale)
mapImage?.draw(in: self.mapView.bounds)
resultImage.draw(in: self.resultView.frame)
let image = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
self.transitionToDetail(with: image)
}
对MapView以及其上的子view进行截图。
当用户在地图上绘制了标注点、覆盖物、信息窗口等数据时,利用该截屏功能可以实现包含地图和绘制数据的完整效果的截屏。
核心类/接口
类 | 接口 | 说明 | 版本 |
---|---|---|---|
AMap | public void getMapScreenShot(AMap.OnMapScreenShotListener listener) | 截取当前屏幕设备上的可见地图区域。 | V2.1.0版本起 |
/**
* 组装地图截图和其他View截图,需要注意的是目前提供的方法限定为MapView与其他View在同一个ViewGroup下
*@param bitmap 地图截图回调返回的结果
*@param viewContainer MapView和其他要截图的View所在的父容器ViewGroup
*@param mapView MapView控件
*@param views 其他想要在截图中显示的控件
* */
public static Bitmap getMapAndViewScreenShot(Bitmap bitmap, ViewGroup viewContainer, MapView mapView, View...views){
int width = viewContainer.getWidth();
int height = viewContainer.getHeight();
final Bitmap screenBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(screenBitmap);
canvas.drawBitmap(bitmap, mapView.getLeft(), mapView.getTop(), null);
for (View view:views){
view.setDrawingCacheEnabled(true);
canvas.drawBitmap(view.getDrawingCache(), view.getLeft(), view.getTop(), null);
}
return screenBitmap;
}