android 开发 百度地图 最新指定区域截图
2016-02-18 16:55
706 查看
package baidumapsdk.demo; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Rect; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BaiduMap.OnMapClickListener; import com.baidu.mapapi.map.BaiduMap.OnMapDoubleClickListener; import com.baidu.mapapi.map.BaiduMap.OnMapLongClickListener; import com.baidu.mapapi.map.BaiduMap.OnMapStatusChangeListener; import com.baidu.mapapi.map.BaiduMap.OnMapTouchListener; import com.baidu.mapapi.map.BaiduMap.SnapshotReadyCallback; import com.baidu.mapapi.map.MapPoi; import com.baidu.mapapi.map.MapStatus; import com.baidu.mapapi.map.MapStatusUpdate; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.model.LatLng; /** * 演示地图缩放,旋转,视角控制 */ public class MapControlDemo extends Activity { /** * MapView 是地图主控件 */ private MapView mMapView; private BaiduMap mBaiduMap; /** * 当前地点击点 */ private LatLng currentPt; /** * 控制按钮 */ private Button zoomButton; private Button rotateButton; private Button overlookButton; private Button saveScreenButton; private String touchType; /** * 用于显示地图状态的面板 */ private TextView mStateBar; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mapcontrol); mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap(); mStateBar = (TextView) findViewById(R.id.state); initListener(); } private void initListener() { // 用户触摸地图时回调接口 mBaiduMap.setOnMapTouchListener(new OnMapTouchListener() { @Override public void onTouch(MotionEvent event) { } }); // 地图单击事件监听接口 mBaiduMap.setOnMapClickListener(new OnMapClickListener() { // 地图单击事件回调函数 public void onMapClick(LatLng point) { touchType = "单击"; currentPt = point; updateMapState(); } // 地图内 Poi 单击事件回调函数 public boolean onMapPoiClick(MapPoi poi) { return false; } }); // 地图长按事件监听回调函数 mBaiduMap.setOnMapLongClickListener(new OnMapLongClickListener() { public void onMapLongClick(LatLng point) { touchType = "长按"; currentPt = point; updateMapState(); } }); // 地图双击事件监听接口 mBaiduMap.setOnMapDoubleClickListener(new OnMapDoubleClickListener() { public void onMapDoubleClick(LatLng point) { touchType = "双击"; currentPt = point; updateMapState(); } }); // 地图状态改变相关接口 mBaiduMap.setOnMapStatusChangeListener(new OnMapStatusChangeListener() { public void onMapStatusChangeStart(MapStatus status) { updateMapState(); } public void onMapStatusChangeFinish(MapStatus status) { updateMapState(); } public void onMapStatusChange(MapStatus status) { updateMapState(); } }); zoomButton = (Button) findViewById(R.id.zoombutton); rotateButton = (Button) findViewById(R.id.rotatebutton); overlookButton = (Button) findViewById(R.id.overlookbutton); saveScreenButton = (Button) findViewById(R.id.savescreen); OnClickListener onClickListener = new OnClickListener() { @Override public void onClick(View view) { if (view.equals(zoomButton)) { perfomZoom(); } else if (view.equals(rotateButton)) { perfomRotate(); } else if (view.equals(overlookButton)) { perfomOverlook(); } else if (view.equals(saveScreenButton)) { /** * snapshot(BaiduMap.SnapshotReadyCallback callback) 发起截图请求 * void snapshotScope(Rect rect, * BaiduMap.SnapshotReadyCallback callback) 发起区域截图请求<br> * 注: Rect为null,截全屏 */ // 截图,在SnapshotReadyCallback中保存图片到 sd 卡 // mBaiduMap.snapshot(new SnapshotReadyCallback() { // public void onSnapshotReady(Bitmap snapshot) { // File file = new File("/mnt/sdcard/test.png"); // FileOutputStream out; // try { // out = new FileOutputStream(file); // if (snapshot.compress(Bitmap.CompressFormat.PNG, 100, // out)) { // out.flush(); // out.close(); // } // Toast.makeText(MapControlDemo.this, "屏幕截图成功,图片存在: " + // file.toString(), // Toast.LENGTH_SHORT).show(); // } catch (FileNotFoundException e) { // e.printStackTrace(); // } catch (IOException e) { // e.printStackTrace(); // } // } // }); // 指定区域截图 Rect rect = new Rect(0, 0, 300, 300);// 左xy 右xy mBaiduMap.snapshotScope(rect, new SnapshotReadyCallback() { @Override public void onSnapshotReady(Bitmap snapshot) { File file = new File("/mnt/sdcard/testall300.png"); FileOutputStream out; try { out = new FileOutputStream(file); if (snapshot.compress(Bitmap.CompressFormat.PNG, 100, out)) { out.flush(); out.close(); } Toast.makeText(MapControlDemo.this, "屏幕截图成功,图片存在: " + file.toString(), Toast.LENGTH_SHORT).show(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }); Toast.makeText(MapControlDemo.this, "正在截取屏幕图片...", Toast.LENGTH_SHORT).show(); } updateMapState(); } }; zoomButton.setOnClickListener(onClickListener); rotateButton.setOnClickListener(onClickListener); overlookButton.setOnClickListener(onClickListener); saveScreenButton.setOnClickListener(onClickListener); } /** * 处理缩放 sdk 缩放级别范围: [3.0,19.0] */ private void perfomZoom() { EditText t = (EditText) findViewById(R.id.zoomlevel); try { float zoomLevel = Float.parseFloat(t.getText().toString()); MapStatusUpdate u = MapStatusUpdateFactory.zoomTo(zoomLevel); mBaiduMap.animateMapStatus(u); } catch (NumberFormatException e) { Toast.makeText(this, "请输入正确的缩放级别", Toast.LENGTH_SHORT).show(); } } /** * 处理旋转 旋转角范围: -180 ~ 180 , 单位:度 逆时针旋转 */ private void perfomRotate() { EditText t = (EditText) findViewById(R.id.rotateangle); try { int rotateAngle = Integer.parseInt(t.getText().toString()); MapStatus ms = new MapStatus.Builder(mBaiduMap.getMapStatus()).rotate(rotateAngle).build(); MapStatusUpdate u = MapStatusUpdateFactory.newMapStatus(ms); mBaiduMap.animateMapStatus(u); } catch (NumberFormatException e) { Toast.makeText(this, "请输入正确的旋转角度", Toast.LENGTH_SHORT).show(); } } /** * 处理俯视 俯角范围: -45 ~ 0 , 单位: 度 */ private void perfomOverlook() { EditText t = (EditText) findViewById(R.id.overlookangle); try { int overlookAngle = Integer.parseInt(t.getText().toString()); MapStatus ms = new MapStatus.Builder(mBaiduMap.getMapStatus()).overlook(overlookAngle).build(); MapStatusUpdate u = MapStatusUpdateFactory.newMapStatus(ms); mBaiduMap.animateMapStatus(u); } catch (NumberFormatException e) { Toast.makeText(this, "请输入正确的俯角", Toast.LENGTH_SHORT).show(); } } /** * 更新地图状态显示面板 */ private void updateMapState() { if (mStateBar == null) { return; } String state = ""; if (currentPt == null) { state = "点击、长按、双击地图以获取经纬度和地图状态"; } else { state = String.format(touchType + ",当前经度: %f 当前纬度:%f", currentPt.longitude, currentPt.latitude); } state += "\n"; MapStatus ms = mBaiduMap.getMapStatus(); state += String.format("zoom=%.1f rotate=%d overlook=%d", ms.zoom, (int) ms.rotate, (int) ms.overlook); mStateBar.setText(state); } @Override protected void onPause() { // MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause() mMapView.onPause(); super.onPause(); } @Override protected void onResume() { // MapView的生命周期与Activity同步,当activity恢复时需调用MapView.onResume() mMapView.onResume(); super.onResume(); } @Override protected void onDestroy() { // MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy() mMapView.onDestroy(); super.onDestroy(); } }
相关文章推荐
- Android之Monkey全参数(包含隐藏参数)
- Android中通过进程注入技术修改系统返回的Mac地址
- 国内优秀Android学习资源
- Android APK反编译得到Java源代码和资源文件
- android悬浮窗口的实现
- android: qq 5.0 demo学习笔记(主 粒子爆炸效果+ViewDragHelper)
- android到底可以加载多大的图不报OOM错误
- Android基础篇(三)——Android中的Activity简单介绍
- Android常用布局样式
- LeakCanary:跟OOM说再见
- AndroidStudio使用笔记
- android中activity的四种启动模式
- Android 中解决ScrollView嵌套ListView或者GridView时的冲突问题
- 关于android apk系统签名
- 利用ffmepg和HLS实现ios和android浏览器在线视频播放
- Android反编工具的使用-Android Killer
- 使用MySQL和Servlet编写Android接口样例
- Android中当加载大图片时进行缩放
- Android开发笔记(六十六)自定义对话框
- Android View中getViewTreeObserver().addOnGlobalLayoutListener()