百度地图全景的显示
我是用的是百度全景SDK2.6.2的版本,之前的版本android8不兼容,在是用这最新的版本中,会碰到一些闪退问题
在这边我就直接上代码!!!本人话少!
在AndroidManifest.xml文件中,加入权限
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="false"
android:resizeable="true"
android:smallScreens="true" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
写一个类继承Application
import com.baidu.lbsapi.BMapManager;
import com.baidu.lbsapi.MKGeneralListener;
import android.app.Application;
import android.content.Context;
import android.util.Log;
import android.widget.Toast;
public class PanorApplication extends Application {
private static PanorApplication mInstance = null;
public BMapManager mBMapManager = null;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
initEngineManager(this);
}
public void initEngineManager(Context context) {
if (mBMapManager == null) {
mBMapManager = new BMapManager(context);
}
if (!mBMapManager.init(new MyGeneralListener())) {
Toast.makeText(
PanorApplication.getInstance().getApplicationContext(),
"BMapManager 初始化错误!", Toast.LENGTH_LONG).show();
}
Log.d("ljx", "initEngineManager");
}
public static PanorApplication getInstance() {
return mInstance;
}
// 常用事件监听,用来处理通常的网络错误,授权验证错误等
static class MyGeneralListener implements MKGeneralListener {
@Override
public void onGetPermissionState(int iError) {
// 非零值表示key验证未通过
if (iError != 0) {
// 授权Key错误:
Toast.makeText(
PanorApplication.getInstance()
.getApplicationContext(),
"请在AndoridManifest.xml中输入正确的授权Key,并检查您的网络连接是否正常!error: "
+ iError, Toast.LENGTH_LONG).show();
} else {
Toast.makeText(
PanorApplication.getInstance()
.getApplicationContext(), "key认证成功",
Toast.LENGTH_LONG).show();
}
}
}
}
接下来便是核心代码,xml的布局也是很简单的,先看一下布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.baidu.lbsapi.panoramaview.PanoramaView
android:id="@+id/panorama"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true" />
</LinearLayout>
核心代码
package com.example.mypanorama;
import com.baidu.lbsapi.BMapManager;
import com.baidu.lbsapi.model.BaiduPanoData;
import com.baidu.lbsapi.panoramaview.PanoramaRequest;
import com.baidu.lbsapi.panoramaview.PanoramaView;
import com.baidu.lbsapi.panoramaview.PanoramaViewListener;
import com.baidu.lbsapi.panoramaview.PanoramaView.ImageDefinition;
import com.example.mypanorama.PanorApplication.MyGeneralListener;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
public class PanoramaMain extends Activity {
private Context context;
private PanoramaView mPanoramaView;
private double lat = 39.91403075654526;
private double lng = 116.40391285827147;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
initBMapManager();
setContentView(R.layout.pannorama_main_layout);
context = PanoramaMain.this;
getView();
}
private void getView() {
mPanoramaView = (PanoramaView) findViewById(R.id.panorama);
//是否显示邻接街景箭头(有邻接全景的时候)
mPanoramaView.setShowTopoLink(true);
//设置全景图的俯仰角
mPanoramaView.setPanoramaPitch(90);
//获取当前全景图的俯仰角
//更新俯仰角的取值范围:室外景[-15, 90], 室内景[-25, 90],
//90为垂直朝上方向,0为水平方向
mPanoramaView.getPanoramaPitch();
//设置全景图的偏航角
mPanoramaView.setPanoramaHeading(60);
//获取当前全景图的偏航角
mPanoramaView.getPanoramaHeading();
//设置全景图的缩放级别
//level分为1-5级
mPanoramaView.setPanoramaLevel(1);
//获取当前全景图的缩放级别
mPanoramaView.getPanoramaLevel();
//全景的事件监听要在setPanorama之前使用,否者可能会引发异常
mPanoramaView.setPanoramaViewListener(new PanoramaViewListener() {
@Override
public void onMoveStart() {
// TODO Auto-generated method stub
}
@Override
public void onMoveEnd() {
// TODO Auto-generated method stub
}
@Override
public void onMessage(String arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onLoadPanoramaError(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onLoadPanoramaEnd(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onLoadPanoramaBegin() {
// TODO Auto-generated method stub
}
@Override
public void onDescriptionLoadEnd(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onCustomMarkerClick(String arg0) {
// TODO Auto-generated method stub
}
});
mPanoramaView
.setPanoramaImageLevel(ImageDefinition.ImageDefinitionHigh);
mPanoramaView.setPanorama(lng, lat, PanoramaView.COORDTYPE_BD09LL);
}
//初始化BMapManager
private void initBMapManager() {
PanorApplication app = (PanorApplication) this.getApplication();
if (app.mBMapManager == null) {
app.mBMapManager = new BMapManager(app);
app.mBMapManager.init(new PanorApplication.MyGeneralListener());
}
}
// 测试获取内景的相册描述信息和服务推荐描述信息
// private void testPanoramaRequest() {
// new Thread() {
// @Override
// public void run() {
// PanoramaRequest panoramaRequest = PanoramaRequest
// .getInstance(context);
// // 通过百度经纬度坐标获取当前位置相关全景信息,包括是否有外景,外景PID,外景名称等
// BaiduPanoData mPanDataWithLaton = panoramaRequest
// .getPanoramaInfoByLatLon(lng, lat);
//
// }
// }.start();
// }
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
mPanoramaView.destroy();
super.onDestroy();
}
}