参考:
一、功能:
1、将百度地图导入到app中
2、引入定位的功能,集合方向传感器实现方向定位
3、添加覆盖物、覆盖物点击的处理
4、模式的切换
二、开发前准备
(1)获取密钥
应用名称:任意填写
应用类型:AndroidSDK
数字签名(SHA1):
在AndroidStudio
的Terminal中输入 keytool -v -list -keystore C:\Users\Administrator\.android\debug.keystore
debug.keystore放置的路径,一般都在这个路径,如果不在就找找。
包名:开发包包名
(2)进入百度地图SDK,相关下载,下载开发包
三、案例
1.引入百度地图
(1)导入jar包和so库(在app中创建libs文件夹将
拷贝进去,再在app/main路径下创建一个jniLibs文件夹将所有的so文件导入)
(2)在manifest中的<application>里,添加
<
meta-data
android
:name=
"com.baidu.lbsapi.API_KEY"
android
:value=
“
开发者 key
”
/>
(3)添加用户权限
<
uses-permission
android
:name=
"android.permission.GET_ACCOUNTS" />
< uses-permission android :name= "android.permission.USE_CREDENTIALS" />
< uses-permission android :name= "android.permission.MANAGE_ACCOUNTS" />
< uses-permission android :name= "android.permission.AUTHENTICATE_ACCOUNTS" />
< uses-permission android :name= "android.permission.ACCESS_NETWORK_STATE" />
< uses-permission android :name= "android.permission.INTERNET" />
< uses-permission android :name= "com.android.launcher.permission.READ_SETTINGS"/>
< uses-permission android :name= "android.permission.CHANGE_WIFI_STATE" />
< uses-permission android :name= "android.permission.ACCESS_WIFI_STATE" />
< uses-permission android :name= "android.permission.READ_PHONE_STATE" />
< uses-permission android :name= "android.permission.WRITE_EXTERNAL_STORAGE" />
< uses-permission android :name= "android.permission.BROADCAST_STICKY" />
< uses-permission android :name= "android.permission.WRITE_SETTINGS" />
< uses-permission android :name= "android.permission.USE_CREDENTIALS" />
< uses-permission android :name= "android.permission.MANAGE_ACCOUNTS" />
< uses-permission android :name= "android.permission.AUTHENTICATE_ACCOUNTS" />
< uses-permission android :name= "android.permission.ACCESS_NETWORK_STATE" />
< uses-permission android :name= "android.permission.INTERNET" />
< uses-permission android :name= "com.android.launcher.permission.READ_SETTINGS"/>
< uses-permission android :name= "android.permission.CHANGE_WIFI_STATE" />
< uses-permission android :name= "android.permission.ACCESS_WIFI_STATE" />
< uses-permission android :name= "android.permission.READ_PHONE_STATE" />
< uses-permission android :name= "android.permission.WRITE_EXTERNAL_STORAGE" />
< uses-permission android :name= "android.permission.BROADCAST_STICKY" />
< uses-permission android :name= "android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
(4)在layout中,添加百度地图的mapView控件
<com.baidu.mapapi.map.MapView
android :id="@+id/bmapView"
android :layout_width="fill_parent"
android :layout_height="fill_parent"
android :clickable="true" />
(5)在MainActivity中,引入Context全局变量
public class MainActivity extends Activity {
private MapView mMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 在使用SDK各组件之前初始化context信息,传入ApplicationContext
// 注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
mMapView = (MapView) findViewById(R.id.id_bmapView);
}
附:2017-7-5 复审,
SDKInitializer.initialize(getApplicationContext()); 最好是在APP中注册一个Application对象用来做全局的初始化操作
(6)让地图的声明周期跟当前Activity生命周期一致
@Override
protected void onDestroy() {
super.onDestroy();
// 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
mMapView = null;
}
@Override
protected void onResume() {
super.onResume();
// 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
// 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
}
(7)设置地图放大比例
mBaiduMap = mMapView.getMap();//从地图视图中获取百度地图实例对象
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);//设置对象为缩放等级15.0,标尺500米左右
mBaiduMap.setMapStatus(msu);//设置地图的比例尺
(8)在main.xml中,设置三个按钮:普通地图,卫星地图,是否开启实时交通
三个菜单控件分别对应如下的OnClickListener事件
mBaiduMap .setMapType(myBaiduMap .MAP_TYPE_NORMAL) ;//普通地图
mBaiduMap .setMapType(myBaiduMap .MAP_TYPE_SATELLITE) ;//卫星地图
mBaiduMap .setTrafficEnabled(false ); //实时交通关闭状态
mBaiduMap .setTrafficEnabled(false); //实时交通开启状态
2.在上面的基础上,引入定位的功能
实现定位的功能,需要:
1、LocationClient
2、LocationClientOption进行定位的一些设置:是否开启GPS,当前的经纬度
3、BDLocationListener接口,通过1进行注册后,因为定位是个耗时的功能,当定位成功后,获得经纬度,再通过该接口进行回调,对主界面ui进行相应的操作
(1)声明地图客户端和监听器
(2)写类去实现,定位成功的回调
private class MyLocationListener implements BDLocationListener{ @Override public void onReceiveLocation(BDLocation location) { } }
(3)初始化必要配置
//locationClient的一些必要的配置
LocationClientOption option = new LocationClientOption(); option.setCoorType("bd09ll");//设置坐标类型 option.setIsNeedAddress(true);//返回当前的位置 option.setOpenGps(true); option.setScanSpan(1000);//每隔1秒进行一次请求 mLocationClient.setLocOption(option);
wgs84 --GPS系统直接通过卫星定位获得的坐标.(最基础的坐标.)
这是百度锁用户的策略,
bd09ll只能百度地图用,
bd09可以其他地图用,所以不让用户把百度地图的数据转成其他地图的数据
gcj02 —天朝以安全原因为由,要求在中国使用的地图产品使用的都必须是加密后的坐标.这套加密后的坐标就是gcj02 google的中国地图.高德地图. 他们为中国市场的产品都是用这套坐标.
bd09ll 百度又在gcj02的技术上将坐标加密就成了 bd09ll坐标.
摩卡托坐标 是一种投影坐标, 它不是用经纬度来表示的. 它多用于航海图 航空图.
*
地图有分多个坐标系,bd09ll(百度经纬度坐标)、bd09mc(百度摩卡托坐标)、gcj02(国测局加密坐标)、wgs84(gps设备获取的坐标)
(4)在定位添加回调里写入
// 构造定位数据 MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius())//设置经度(半径) //
.direction(mXDirection)// 此处设置开发者获取到的方向信息,顺时针0-360
.latitude(location.getLatitude())//设置纬度 .longitude(location.getLongitude())//设置经度 .build(); mBaiduMap.setMyLocationData(locData);//得到的数据转化给地图
// 第一次定位时,将地图位置移动到当前位置 if (isFirstIn) { LatLng latLng = new LatLng( location.getLatitude(),//纬度 location.getLongitude());//经度 MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng); mBaiduMap.animateMapStatus(msu); isFirstIn = false;//当用户执行其他操作,类似下拉地图,不会又回到坐标点 }
(5)开启和关闭定位(6)在Manifest中的<application>,注册百度定位时的服务@Override protected void onStart() { super.onStart(); //开启定位 mBaiduMap.setMyLocationEnabled(true);//默认开启定位允许 if(!mLocationClient.isStarted())//如果没有启动,让他启动 mLocationClient.start(); } @Override protected void onStop() { super.onStop(); //停止定位 mBaiduMap.setMyLocationEnabled(false); mLocationClient.stop(); }
(6)在Manifest中的<application>,注册百度定位时的服务
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> <intent-filter> <action android:name = "com.baidu.location.service_v2.2"> </action> </intent-filter> </service>
大致完成百度地图定位了
(7)初始化
private Context context;
this.context = this;
// 在使用SDK各组件之前初始化context信息,传入ApplicationContext
*通过toast获取地址的位置,反馈给用户
mLocationClient =
new LocationClient(
this);
mLocationListener = new MyLocationListener();
mLocationClient.registerLocationListener(mLocationListener);//为当前的定位器注册监听事件
private LocationClient mLocationClient;//定位的客户端 private MyLocationListener mLocationListener;//定位的监听器
private boolean
isFirstIn =
true;
//第一次登陆
(9)在main.xml中,添加按钮
<item android:id="@+id/id_map_location" android:showAsAction="never" android:title="我的位置"/>
(10)实现事件(抽取代码用cmd+alt+M)
private double mLatitude; private double mLongitude;
case R.id.id_map_location:
centerToMyLocation();
break;
/*
*定位到我的位置
*/
private void centerToMyLocation() { LatLng latLng =
new LatLng(
mLatitude,
//纬度
mLongitude);
//经度
MapStatusUpdate msu = MapStatusUpdateFactory.
newLatLng(latLng);
mBaiduMap.animateMapStatus(msu);}
3、例子三:集合方向传感器实现方向定位
1、自定义图标,需要:
BitmapDescriptor
(1)导入图标
(2)初始化
//自定义图标
private BitmapDescriptor mIconLocation;
/初始化图标
mIconLocation = BitmapDescriptorFactory.
fromResource(R.drawable.
navi_map_gps_locked);
(3)在回调函数中,增加
//设置自定义图标
MyLocationConfigeration config =
new MyLocationConfigeration(MyLocationConfigeration.LocationMode.
NORMAL,
true,
mIconLocation);
mBaiduMap.setMyLocationConfigeration(config);
2、引入方向传感器
(1)方向传感器类用来进行传感器的获取和传感器方向改变的监听
package
com.xl.maptest
;
import android.content.Context ;
import android.hardware.Sensor ;
import android.hardware.SensorEvent ;
import android.hardware.SensorEventListener ;
import android.hardware.SensorManager ;
import android.widget.Toast ;
/**
* Created by Administrator on 2/2/2016.
*/
public class MyOrientationListener implements SensorEventListener {
private SensorManager mSensorManager ;
private Context mContext ;
private Sensor mSensor ;
private float lastX ;
public MyOrientationListener(Context context) {
this . mContext = context ;
}
public void start ()
{
mSensorManager = (SensorManager) mContext .getSystemService(Context. SENSOR_SERVICE ) ; //获得系统服务
if ( mSensorManager != null )
{
Toast.makeText ( mContext , "获取到方向传感器" , Toast. LENGTH_LONG ).show() ;
//获得方向传感器
mSensor = mSensorManager .getDefaultSensor(Sensor. TYPE_ORIENTATION ) ;
}
if ( mSensor != null )
{
mSensorManager .registerListener( this, mSensor , mSensorManager . SENSOR_DELAY_UI ) ; //设置传感器精度
}
}
public void stop ()
{
mSensorManager .unregisterListener( this ) ;
}
@Override
public void onSensorChanged (SensorEvent event) {
if (event. sensor .getType()==Sensor. TYPE_ORIENTATION )
{
float x =event. values [SensorManager. DATA_X ] ;
if (Math. abs(x- lastX )> 1.0 )
{
if ( mOnOrientationListener != null )
{
mOnOrientationListener .onOrientationChanged(x) ;
}
}
lastX =x ;
}
}
public void setOnOrientationListener (OnOrientationListener mOnOrientationListener) {
this . mOnOrientationListener = mOnOrientationListener ;
}
private OnOrientationListener mOnOrientationListener ;
@Override
public void onAccuracyChanged (Sensor sensor , int accuracy) {
}
public interface OnOrientationListener{
void onOrientationChanged ( float x) ;
}
}
import android.content.Context ;
import android.hardware.Sensor ;
import android.hardware.SensorEvent ;
import android.hardware.SensorEventListener ;
import android.hardware.SensorManager ;
import android.widget.Toast ;
/**
* Created by Administrator on 2/2/2016.
*/
public class MyOrientationListener implements SensorEventListener {
private SensorManager mSensorManager ;
private Context mContext ;
private Sensor mSensor ;
private float lastX ;
public MyOrientationListener(Context context) {
this . mContext = context ;
}
public void start ()
{
mSensorManager = (SensorManager) mContext .getSystemService(Context. SENSOR_SERVICE ) ; //获得系统服务
if ( mSensorManager != null )
{
Toast.makeText ( mContext , "获取到方向传感器" , Toast. LENGTH_LONG ).show() ;
//获得方向传感器
mSensor = mSensorManager .getDefaultSensor(Sensor. TYPE_ORIENTATION ) ;
}
if ( mSensor != null )
{
mSensorManager .registerListener( this, mSensor , mSensorManager . SENSOR_DELAY_UI ) ; //设置传感器精度
}
}
public void stop ()
{
mSensorManager .unregisterListener( this ) ;
}
@Override
public void onSensorChanged (SensorEvent event) {
if (event. sensor .getType()==Sensor. TYPE_ORIENTATION )
{
float x =event. values [SensorManager. DATA_X ] ;
if (Math. abs(x- lastX )> 1.0 )
{
if ( mOnOrientationListener != null )
{
mOnOrientationListener .onOrientationChanged(x) ;
}
}
lastX =x ;
}
}
public void setOnOrientationListener (OnOrientationListener mOnOrientationListener) {
this . mOnOrientationListener = mOnOrientationListener ;
}
private OnOrientationListener mOnOrientationListener ;
@Override
public void onAccuracyChanged (Sensor sensor , int accuracy) {
}
public interface OnOrientationListener{
void onOrientationChanged ( float x) ;
}
}
在主Activity中将传感器的生命周期与定位的生命周期保持一致。
//开启方向传感器
myOrientationListener
.start()
;
//停止方向传感器
myOrientationListener
.stop()
;
实现方向传感器类的回调
myOrientationListener
=
new
MyOrientationListener(
context
)
;
myOrientationListener .setOnOrientationListener( new MyOrientationListener.OnOrientationListener() {
@Override
public void onOrientationChanged ( float x) {
mCurrentX = x ;
}
myOrientationListener .setOnOrientationListener( new MyOrientationListener.OnOrientationListener() {
@Override
public void onOrientationChanged ( float x) {
mCurrentX = x ;
}
});
4、例子四:模式的切换
MyLocationConfiguration这个类提供了三个枚举类型的LocationMode
public static enum
LocationMode {
NORMAL ,
FOLLOWING ,
NORMAL ,
FOLLOWING ,
COMPASS ;
MyLocationConfiguration config =
new
MyLocationConfiguration(
mLocationMode
,true,
mIconLocation
)
;
myBaiduMap
.setMyLocationConfigeration(config)
;
它可以传输三个参数分别是 参数1:模式,参数2:是否启动定位 参数3:定位坐标图片
在main上添加三个item,个item点击事件分别如下
case
R.id.
id_map_mode_common
:
mLocationMode = MyLocationConfiguration.LocationMode. NORMAL ;
break;
case R.id. id_map_mode_follow :
mLocationMode = MyLocationConfiguration.LocationMode. FOLLOWING ;
break;
case R.id. id_map_mode_compass :
mLocationMode = MyLocationConfiguration.LocationMode. COMPASS ;
mLocationMode = MyLocationConfiguration.LocationMode. NORMAL ;
break;
case R.id. id_map_mode_follow :
mLocationMode = MyLocationConfiguration.LocationMode. FOLLOWING ;
break;
case R.id. id_map_mode_compass :
mLocationMode = MyLocationConfiguration.LocationMode. COMPASS ;
break;
5、例子五:添加覆盖物,覆盖物点击处理
Marker覆盖物
OverLayOptions 覆盖物添加在所在的图层上,可以设置图标和位置。
写一个Info类用来存储静态信息。
package
com.xl.maptest
;
import java.io.Serializable ;
import java.util.ArrayList ;
import java.util.List ;
public class Info implements Serializable
{
private static final long serialVersionUID = - 1010711775392052966L ;
private double latitude ;
private double longitude ;
private int imgId ;
private String name ;
private String distance ;
private int zan ;
public static List<Info> infos = new ArrayList<Info>() ;
static
{
infos .add( new Info( 34.242652 , 108.971171 , R.drawable. a01 , "英伦贵族小旅馆" ,
"距离209米" , 1456 )) ;
infos .add( new Info( 34.242952 , 108.972171 , R.drawable. a02 , "沙井国际洗浴会所" ,
"距离897米" , 456 )) ;
infos .add( new Info( 34.242852 , 108.973171 , R.drawable. a03 , "五环服装城" ,
"距离249米" , 1456 )) ;
infos .add( new Info( 34.242152 , 108.971971 , R.drawable. a04 , "老米家泡馍小炒" ,
"距离679米" , 1456 )) ;
}
public Info( double latitude , double longitude , int imgId , String name ,
String distance , int zan)
{
this . latitude = latitude ;
this . longitude = longitude ;
this . imgId = imgId ;
this . name = name ;
this . distance = distance ;
this . zan = zan ;
}
public double getLatitude ()
{
return latitude ;
}
public void setLatitude ( double latitude)
{
this . latitude = latitude ;
}
public double getLongitude ()
{
return longitude ;
}
public void setLongitude ( double longitude)
{
this . longitude = longitude ;
}
public int getImgId ()
{
return imgId ;
}
public void setImgId ( int imgId)
{
this . imgId = imgId ;
}
public String getName ()
{
return name ;
}
public void setName (String name)
{
this . name = name ;
}
public String getDistance ()
{
return distance ;
}
public void setDistance (String distance)
{
this . distance = distance ;
}
public int getZan ()
{
return zan ;
}
public void setZan ( int zan)
{
this . zan = zan ;
}
import java.io.Serializable ;
import java.util.ArrayList ;
import java.util.List ;
public class Info implements Serializable
{
private static final long serialVersionUID = - 1010711775392052966L ;
private double latitude ;
private double longitude ;
private int imgId ;
private String name ;
private String distance ;
private int zan ;
public static List<Info> infos = new ArrayList<Info>() ;
static
{
infos .add( new Info( 34.242652 , 108.971171 , R.drawable. a01 , "英伦贵族小旅馆" ,
"距离209米" , 1456 )) ;
infos .add( new Info( 34.242952 , 108.972171 , R.drawable. a02 , "沙井国际洗浴会所" ,
"距离897米" , 456 )) ;
infos .add( new Info( 34.242852 , 108.973171 , R.drawable. a03 , "五环服装城" ,
"距离249米" , 1456 )) ;
infos .add( new Info( 34.242152 , 108.971971 , R.drawable. a04 , "老米家泡馍小炒" ,
"距离679米" , 1456 )) ;
}
public Info( double latitude , double longitude , int imgId , String name ,
String distance , int zan)
{
this . latitude = latitude ;
this . longitude = longitude ;
this . imgId = imgId ;
this . name = name ;
this . distance = distance ;
this . zan = zan ;
}
public double getLatitude ()
{
return latitude ;
}
public void setLatitude ( double latitude)
{
this . latitude = latitude ;
}
public double getLongitude ()
{
return longitude ;
}
public void setLongitude ( double longitude)
{
this . longitude = longitude ;
}
public int getImgId ()
{
return imgId ;
}
public void setImgId ( int imgId)
{
this . imgId = imgId ;
}
public String getName ()
{
return name ;
}
public void setName (String name)
{
this . name = name ;
}
public String getDistance ()
{
return distance ;
}
public void setDistance (String distance)
{
this . distance = distance ;
}
public int getZan ()
{
return zan ;
}
public void setZan ( int zan)
{
this . zan = zan ;
}
}
在main中添加一个item:添加覆盖物
//覆盖物相关
private BitmapDescriptor mMarker ;
private BitmapDescriptor mMarker ;
private RelativeLayout mMarkerLy;
private void
initMarker
() {
mMarker =BitmapDescriptorFactory.fromResource(R.mipmap. maker ) ;
mMarkerLy =(RelativeLayout)findViewById(R.id. id_marker_layout ) ;
mMarker =BitmapDescriptorFactory.fromResource(R.mipmap. maker ) ;
mMarkerLy =(RelativeLayout)findViewById(R.id. id_marker_layout ) ;
}
在addOverlays存放了info
对象
/**
* 添加覆盖物
* @param infos
*/
private void addOverlays (List<Info> infos) {
myBaiduMap .clear() ;
LatLng latLng = null;
Marker marker = null;
OverlayOptions options ;
for (Info info:infos)
{
//经纬度
latLng = new LatLng(info.getLatitude() , info.getLongitude()) ;
//图标
options = new MarkerOptions().position(latLng).icon( mMarker ).zIndex( 5 ) ;
marker =(Marker) myBaiduMap .addOverlay(options) ;
Bundle mBundle = new Bundle() ;
mBundle.putSerializable( "info" , info) ;
marker.setExtraInfo(mBundle) ;
}
MapStatusUpdate msu =MapStatusUpdateFactory.newLatLng (latLng) ;
myBaiduMap .setMapStatus(msu) ;
* 添加覆盖物
* @param infos
*/
private void addOverlays (List<Info> infos) {
myBaiduMap .clear() ;
LatLng latLng = null;
Marker marker = null;
OverlayOptions options ;
for (Info info:infos)
{
//经纬度
latLng = new LatLng(info.getLatitude() , info.getLongitude()) ;
//图标
options = new MarkerOptions().position(latLng).icon( mMarker ).zIndex( 5 ) ;
marker =(Marker) myBaiduMap .addOverlay(options) ;
Bundle mBundle = new Bundle() ;
mBundle.putSerializable( "info" , info) ;
marker.setExtraInfo(mBundle) ;
}
MapStatusUpdate msu =MapStatusUpdateFactory.newLatLng (latLng) ;
myBaiduMap .setMapStatus(msu) ;
}
对百度地图设置覆盖物设置点击事件
myBaiduMap.setOnMarkerClickListener(
new BaiduMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
Bundle ExtraInfo = marker.getExtraInfo() ;
Info info = (Info) ExtraInfo.getSerializable( "info") ;
ImageView iv = (ImageView) mMarkerLy.findViewById(R.id. id_info_img) ;
TextView distance = (TextView) mMarkerLy.findViewById(R.id. id_info_distance) ;
TextView dname = (TextView) mMarkerLy.findViewById(R.id. id_info_name) ;
TextView zan = (TextView) mMarkerLy.findViewById(R.id. id_info_zan) ;
iv.setImageResource(info.getImgId()) ;
distance.setText(info.getDistance()) ;
dname.setText(info.getName()) ;
zan.setText(info.getZan() + "") ;
mMarkerLy.setVisibility(View. VISIBLE) ;
return true;
}
}) ;
myBaiduMap.setOnMapClickListener( new BaiduMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
mMarkerLy.setVisibility(View. GONE) ;
@Override
public boolean onMarkerClick(Marker marker) {
Bundle ExtraInfo = marker.getExtraInfo() ;
Info info = (Info) ExtraInfo.getSerializable( "info") ;
ImageView iv = (ImageView) mMarkerLy.findViewById(R.id. id_info_img) ;
TextView distance = (TextView) mMarkerLy.findViewById(R.id. id_info_distance) ;
TextView dname = (TextView) mMarkerLy.findViewById(R.id. id_info_name) ;
TextView zan = (TextView) mMarkerLy.findViewById(R.id. id_info_zan) ;
iv.setImageResource(info.getImgId()) ;
distance.setText(info.getDistance()) ;
dname.setText(info.getName()) ;
zan.setText(info.getZan() + "") ;
mMarkerLy.setVisibility(View. VISIBLE) ;
return true;
}
}) ;
myBaiduMap.setOnMapClickListener( new BaiduMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
mMarkerLy.setVisibility(View. GONE) ;
}
6、例子六:点击覆盖物显示文本
InfoWindow infoWindow
;
TextView tv = new TextView( context ) ;
tv.setBackgroundResource(R.drawable. location_tips ) ;
tv.setPadding( 30 , 20 , 30 , 50 ) ;
tv.setText(info.getName()) ;
tv.setTextColor(Color.parseColor ( "#ffffff" )) ;
final LatLng latLng = marker.getPosition() ;
// Point p = myBaiduMap.getProjection().toScreenLocation(latLng);
// p.y -= 47;
// LatLng ll = myBaiduMap.getProjection().fromScreenLocation(p);
infoWindow = new InfoWindow(tv , latLng , - 47 ) ;
myBaiduMap .showInfoWindow(infoWindow) ;
TextView tv = new TextView( context ) ;
tv.setBackgroundResource(R.drawable. location_tips ) ;
tv.setPadding( 30 , 20 , 30 , 50 ) ;
tv.setText(info.getName()) ;
tv.setTextColor(Color.parseColor ( "#ffffff" )) ;
final LatLng latLng = marker.getPosition() ;
// Point p = myBaiduMap.getProjection().toScreenLocation(latLng);
// p.y -= 47;
// LatLng ll = myBaiduMap.getProjection().fromScreenLocation(p);
infoWindow = new InfoWindow(tv , latLng , - 47 ) ;
myBaiduMap .showInfoWindow(infoWindow) ;
mMarkerLy.setVisibility(View. VISIBLE);
InfoWindow 有两个构造
public InfoWindow(View var1, LatLng var2, int var3) {
if(var1 != null && var2 != null) {
this.b = var1;
this.c = var2;
this.e = var3;
} else {
throw new IllegalArgumentException("view and position can not be null");
}
}
这个第一个是控件View 第二个是坐标,第三个是偏移量
public InfoWindow(BitmapDescriptor var1, LatLng var2, int var3, InfoWindow.OnInfoWindowClickListener var4) {
if(var1 != null && var2 != null) {
this.a = var1;
this.c = var2;
this.d = var4;
this.e = var3;
} else {
throw new IllegalArgumentException("bitmapDescriptor and position can not be null");
}
特地把InfoWindow 四个参数bitmapDescriptor Latlng int OnInfoWindowClickListener
在这里的话 第一个是图片 第二个坐标,第三个是窗口偏移量 第四个是为窗口添加单击监听...
myBaiduMap
.showInfoWindow(infoWindow)
;
myBaiduMap .hideInfoWindow()
;
用来显示和隐藏InfoWindow