百度地圖__載入最簡單的地圖

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;
	}
    
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章