地图截图功能

该示例向您展示如何对MapView以及其上的子view进行截图,即含自定义绘制效果的地图截图。
下载源代码
00:00 / 00:12
体验移动端 扫码体验移动端

使用场景

对MapView以及其上的子view进行截图。

当用户在地图上绘制了标注点、覆盖物、信息窗口等数据时,利用该截屏功能可以实现包含地图和绘制数据的完整效果的截屏。

用到产品

iOS 地图 SDK

核心类/接口

接口

说明

版本

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)
}
下载源代码
00:00 / 00:12
体验移动端 扫码体验移动端

使用场景

对MapView以及其上的子view进行截图。

当用户在地图上绘制了标注点、覆盖物、信息窗口等数据时,利用该截屏功能可以实现包含地图和绘制数据的完整效果的截屏。

用到产品

Android 地图 SDK

核心类/接口

接口

说明

版本

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;
}
示例中心 常见问题

AltStyle によって変換されたページ (->オリジナル) /