您的位置:首页 > 移动开发 > Android开发

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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: