Hello的例子
加入jar包
修改Manifest.xml
根據百度lbs的那個Hello例子寫,增加網絡權限什麼的和開發的KEY。
增加到Main.xml
<!-- 只寫成MapView編譯通過 但運行肯定會出錯 找不到MapView -->
<com.baidu.mapapi.map.MapView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mapView" />
Activity.java中
public class MainActivity extends Activity {
private MapView mapView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());//必須寫在setContentView前
setContentView(R.layout.activity_main);
mapView=(MapView)findViewById(R.id.mapView);
}
}
引入控制類BaiduMap
public class MainActivity extends Activity {
private MapView mapView;
private BaiduMap baiduMap;//引入控制器類
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());//必須寫在setContentView前
setContentView(R.layout.activity_main);
mapView=(MapView)findViewById(R.id.mapView);
baiduMap=mapView.getMap();//獲取地圖的控制
baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);//setMapType設置爲衛星地圖
}
}
增加覆蓋物OverlayOptions
baiduMap=mapView.getMap();//獲取地圖的控制
LatLng point = new LatLng(39.963175, 116.400244); //插入位置
BitmapDescriptor bitmapDescripter=BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding);//圖標
OverlayOptions imgOption=new MarkerOptions()//圖標Options=MarkerOptions 文字=TextOptions 幾何=PolygonOptions
.position(point)
.icon(bitmapDescripter);
baiduMap.addOverlay(imgOption);
//圖標 文字 幾何都是用addOverlay(OverlayOptions option) 然後有按鈕彈出用showInfoWindow(InfoWindow infoWindow)
簡單--彈出框覆蓋物
LatLng point=new LatLng(39.86923, 116.397428); //1.LatLng 位置
Button button=new Button(getApplicationContext()); //2.Button
button.setBackgroundResource(R.drawable.popup);
button.setText("click here");
button.setTextColor(android.graphics.Color.BLACK);
OnInfoWindowClickListener listener=new OnInfoWindowClickListener(){//3.OnInfoWindowClickListener監聽器
@Override
public void onInfoWindowClick() {
Intent intent =new Intent(MainActivity.this,b.class);//跳轉到另一個頁面 記得mainfest.xml中多加個<Activity />
MainActivity.this.startActivity(intent);
}
};
InfoWindow infoWindow=new InfoWindow(button,point,listener);//新建InfoWindow
baiduMap.showInfoWindow(infoWindow);//顯示 這裏不用addOverlay了
複雜點的--彈出覆蓋物
package com.example.z;
import java.util.ArrayList;
import java.util.Iterator;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Point;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.Button;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
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.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.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
public class MainActivity extends Activity {
private MapView mapView;
private BaiduMap baiduMap;//引入控制器類
private Marker markerA,markerB;
private InfoWindow infoWindow;
private ArrayList<LatLng> LLArray=new ArrayList<LatLng>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());//必須寫在setContentView前
setContentView(R.layout.activity_main);
mapView=(MapView)findViewById(R.id.mapView);
baiduMap=mapView.getMap();//獲取地圖的控制
initMarkerA();
initMarkerB();
baiduMap.setOnMarkerClickListener(new OnMarkerClickListener(){
@Override
public boolean onMarkerClick(final Marker marker) {
//1.Button
Button button =new Button(getApplicationContext());
button.setBackgroundResource(R.drawable.popup);
button.setTextColor(android.graphics.Color.BLACK);
//2.pop出現位置
final LatLng latlng=marker.getPosition();
Point p = baiduMap.getProjection().toScreenLocation(latlng);
p.y -= 47;
LatLng infoLL = baiduMap.getProjection().fromScreenLocation(p);
//3.監聽函數 並通過if(marker==xxx)判斷哪個marker傳入 然後執行對應的操作
OnInfoWindowClickListener listener = null;
if(marker==markerA){
button.setText("move A");
listener=new OnInfoWindowClickListener(){
@Override
public void onInfoWindowClick() {
LatLng llNew = new LatLng(latlng.latitude - 0.005,//上面也要寫成final
latlng.longitude - 0.005);
marker.setPosition(llNew);//上面沒寫final 這裏會出錯
baiduMap.hideInfoWindow();
}
};
}
if(marker==markerB){
button.setText("go to B");
listener=new OnInfoWindowClickListener(){
@Override
public void onInfoWindowClick() {
// do something
Intent intent =new Intent(MainActivity.this,b.class);
MainActivity.this.startActivity(intent);
}
};
}
//4.生成pop
infoWindow=new InfoWindow(button,infoLL,listener);
baiduMap.showInfoWindow(infoWindow);
return true;
}
});
}
private void initMarkerA(){
LatLng pointA=new LatLng(39.83923, 116.367428); LLArray.add(pointA);
BitmapDescriptor bitmapFactory=BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding);
OverlayOptions imgOptions=new MarkerOptions()
.position(pointA)
.icon(bitmapFactory);
markerA=(Marker)baiduMap.addOverlay(imgOptions);
//上次直接baidu.addOverlay() 所以沒有find到A 監聽函數的if(marker==markerA)一直爲false
}
private void initMarkerB(){
LatLng pointB=new LatLng(39.85923, 116.387428); LLArray.add(pointB);
BitmapDescriptor bitmapFactory=BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding);
OverlayOptions imgOptions=new MarkerOptions()
.position(pointB)
.icon(bitmapFactory);
markerB=(Marker)baiduMap.addOverlay(imgOptions);
//設置中心點 其他的設置地圖放縮比例也是用這個類
MapStatusUpdate u=MapStatusUpdateFactory.newLatLng(pointB);
baiduMap.setMapStatus(u);
}
@Override
public boolean onTouchEvent(MotionEvent event) {//不完善版 點擊marker外區域 消去InfoWindow
// TODO Auto-generated method stub
int xLocal=(int)event.getX();
int yLocal=(int)event.getY();
Iterator<LatLng> iterator=LLArray.iterator();
while(iterator.hasNext()){//防止marker的監聽事件與屏幕的監聽事件衝突
Point p = baiduMap.getProjection().toScreenLocation(iterator.next());
if(p.x-80<xLocal&&xLocal<p.x+80&&p.y-80<yLocal&&yLocal<p.y+80){
return false;
}
}
baiduMap.hideInfoWindow();
return true;
}
}