百度地图3.1.1开发简略之地图闪烁图标

一、最新动态
新一代的朋友,我们好好的加油,大家一起大声的说,NO NO NO NO NO
我可以改变世界,改变自己,改变隔膜,改变消极,要一直 努力 努力,永不放弃,才可以改变世界,COME ON 改变自己。

我的心情就像上面王力宏唱的这首歌,新年新气象,我要改变以前的浑浑噩噩,努力向上。希望读者能够理解我的心情!

二、干货

百度地图接触好久了,从1.3.0的版本就认识百度地图了。那个时候谷歌地图还没那么不稳定,百度就是备胎,可如今呢,风水轮流转,谷歌地图却被打入了冷宫。哎,不知我是伤心呢还是伤心呢!我是不是有点太善感了?不说了,言归正传,今天就讲下3.1.1版本的地图 API。let's begin

1 准备工作

1 去百度地图开放平台下载 Android版的3.1.1 的sdk,他的下载有三种,如果方便你选择全部下载。这样东西比较全,你学习就方便。

2 注册百度开发账户,这样你就可以创建一个应用,你登录后,点击API控制台可以看到你所有的应用,我登录如下图

百度地图3.1.1开发简略之地图闪烁图标_第1张图片

每个应用都有一个唯一的API key,这个key是很重要的,他是数字签名+分号+包名生成的。还没有申请的请去往这里 :http://developer.baidu.com/map/index.php?title=androidsdk/guide/key。

2 配置Manifest

1.配置key


         












3.代码开发

首先 继承Android 的application,然后再onCreate方法中添加一句初始化语句

SDKInitializer.initialize(this);
现在可以写自己的activity了,我的activity主要实现了一个图标闪烁,上代码


 

import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button;

import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BaiduMap.OnMapLoadedCallback;
import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.InfoWindow;
import com.baidu.mapapi.map.InfoWindow.OnInfoWindowClickListener;
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.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.model.LatLng;

/**
* 演示覆盖物的用法
*/
public class MainActivity extends Activity implements OnClickListener{

/**
* MapView 是地图主控件
*/
private MapView mMapView;
private BaiduMap mBaiduMap;
//在地图中显示一个信息窗口,可以设置一个View作为该窗口的内容,也可以设置一个 BitmapDescriptor 作为该窗口的内容。
private InfoWindow mInfoWindow;

//这三个就是地图上的小图标背景,是两种颜色同等大小的图片,一红一绿,他们两个交互显示就是闪烁的效果。不用时及时 recycle
BitmapDescriptor icBig = BitmapDescriptorFactory.fromResource(R.drawable.b_green);
BitmapDescriptor icSmall = BitmapDescriptorFactory.fromResource(R.drawable.b_red);

String[] loca;
String who = "test";
Map map = new HashMap();

Timer timer;
int blinked ;
public static final int DISPALY_TIME = 1200;
public static final int BLINK_INTERVAL = 600;
public static final int BLINK_DELAY = 1000;
public static final int ZOOM_SIZE = 14;

double baseLat = 39.963175;
double baseLong = 116.400244;
MarkerOptions marker,marker2;
Marker mk;

Button customerBtn,watchBtn;

boolean customerMode =true;
int zindex;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.activity_main);

customerBtn = (Button) findViewById(R.id.customer);
watchBtn = (Button) findViewById(R.id.watch);

customerBtn.setOnClickListener(this);
watchBtn.setOnClickListener(this);

mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(16.0f);//设置地图的缩放级别
mBaiduMap.setMapStatus(msu);//

//添加地图加载监听器 ,
mBaiduMap.setOnMapLoadedCallback(new OnMapLoadedCallback() {

@Override
public void onMapLoaded() {
//地图加载完,刷新小图标
timer = new Timer();
startBlink(getLatLng(baseLat+"",baseLong+""));
setMapCenter(getLatLng(baseLat+"",baseLong+""));
}
});

mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {
public boolean onMarkerClick(final Marker marker) {
Button button = new Button(getApplicationContext());//新建一个按钮,这个就是点击小图标后显示的view
button.setBackgroundResource(R.drawable.popup);//给按钮设置背景
OnInfoWindowClickListener listener = null;
String all = marker.getTitle();
String name = who;
button.setText(name);//设置点击后显示的文字
button.setTextColor(getResources().getColor(R.color.black));
listener = new OnInfoWindowClickListener() {
public void onInfoWindowClick() {
LatLng ll = marker.getPosition();
// LatLng llNew = new LatLng(ll.latitude + 0.005,ll.longitude + 0.005);
marker.setPosition(ll);
//当前的图标隐藏掉(这个隐藏是全隐藏掉,没有找到只隐藏掉文字的直接方法,通过先隐藏再显示间接隐藏了文字)
mBaiduMap.hideInfoWindow();
}
};
LatLng ll = marker.getPosition();
//InfoWindow 构造参数
//view - InfoWindow 展示的 view
//position - InfoWindow 显示的地理位置
//yOffset - InfoWindow Y 轴偏移量
//listener - InfoWindow 点击监听者
mInfoWindow = new InfoWindow(BitmapDescriptorFactory.fromView(button), ll, -47, listener);
mBaiduMap.showInfoWindow(mInfoWindow);
return true;
}
});

findViewById(R.id.back).setOnClickListener(this);
}

public void startBlink(LatLng mlatlng){
marker = new MarkerOptions().position(mlatlng).icon(icBig).zIndex(zindex++);//设置zindex是为图标设置一个id,为以后获取他
marker.title(who);

timer.schedule(new TimerTask(){

@Override
public void run() {
if(blinked >DISPALY_TIME){
timer.cancel();
mk.remove();//小图标移除
}else{
if(blinked <=0){
mk = (Marker) mBaiduMap.addOverlay(marker);
}else{
if(blinked % 2 == 1){
mk.setIcon(icSmall);
}else{
mk.setIcon(icBig);
}
}
blinked++;
}

}}, BLINK_DELAY,BLINK_INTERVAL);


}

public LatLng getLatLng(String latitude,String longtitude){

LatLng llA = new LatLng(Double.parseDouble(latitude), Double.parseDouble(longtitude));
return llA;

}


public void freshMap(String lat,String lon,String who){
startBlink(getLatLng(lat,lon));
if(customerMode){
setMapCenter(getLatLng(lat,lon));
}
}

public void setMapCenter(LatLng ll){
MapStatus mMapStatus = new MapStatus.Builder().target(ll).zoom(ZOOM_SIZE).build();
//定义MapStatusUpdate对象,以便描述地图状态将要发生的变化
MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
//改变地图状态
mBaiduMap.setMapStatus(mMapStatusUpdate);
}

/**
* 清除所有Overlay
*
* @param view
*/
public void clearOverlay(View view) {
mBaiduMap.clear();
}

/**
* 重新添加Overlay
*
* @param view
*/
public void resetOverlay(View view) {
clearOverlay(null);

}

@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()
super.onDestroy();
mMapView.onDestroy();
icBig.recycle();
icSmall.recycle();
}

@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.back:
finish();
timer.cancel();
break;
}
}

}

三、要点总结

百度地图从3.0.0版本改动的比较大,所以要想用新的sdk开发地图,记住几点,第一key声明的地方放到Manifest里面去了。第二地图上加图标用到了BitmapDescriptor,点击图标弹出view用到了InfoWindow,设置地图中心点用到了MapStatusUpdate。希望我的简单介绍能给那些快速开发百度地图的童鞋们带来方便。第一次写难免有不周全的地方,烦请大家多多给予意见!

 

你可能感兴趣的:(android开发精髓)