最近在写一个安卓程序,用到了百度地图API的一些内容,就随便玩耍了一下。
这个DEMO是用来将多个地点标记在地图上,然后点击节点弹出PopupWindow
下面是一些截图:
main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.baidumaptest.MainActivity" >
<LinearLayout
android:id="@+id/ll_baidumap"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
>
<TextView
android:id="@+id/tv_showinfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</RelativeLayout>
popupwindow_showlocations.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="#89D3D3D3"
>
<TextView
android:id="@+id/tv_locationname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="地点:"
android:textSize="20sp"
/>
<TextView
android:id="@+id/tv_locationtime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="时间:"
android:textSize="20sp"
/>
</LinearLayout>
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.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;
import com.baidu.mapapi.model.LatLngBounds;
import android.support.v7.app.ActionBarActivity;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
private MapView mMapView;
private BaiduMap mBaiduMap;
private Marker marker[];
private TextView locationName;
private TextView locationTime;
private PopupWindow infoPopupWindow;
BitmapDescriptor bitmapDescriptor;
BitmapDescriptor bdGround;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.layout_showlocations);
locationName = (TextView)findViewById(R.id.tv_locationname);
locationTime = (TextView)findViewById(R.id.tv_locationtime);
LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
View popupWindow = layoutInflater.inflate(R.layout.popupwindow_showlocations, null);
infoPopupWindow = new PopupWindow(popupWindow, 600, 800);
infoPopupWindow.setFocusable(true);
infoPopupWindow.setBackgroundDrawable(new BitmapDrawable());
locationName = (TextView)popupWindow.findViewById(R.id.tv_locationname);
locationTime = (TextView)popupWindow.findViewById(R.id.tv_locationtime);
final LocationOfPhoto locations[] = new LocationOfPhoto[4];
locations[0] = new LocationOfPhoto("齐鲁软件学院", "2013.06.06", 36.673141, 117.114275);
locations[1] = new LocationOfPhoto("天安门", "2014.06.06", 39.912089, 116.403928);
locations[2] = new LocationOfPhoto("五大道", "2013.04.02", 39.116073, 117.203932);
locations[3] = new LocationOfPhoto("甘肃白银", "2013.04.02", 36.501821, 104.205648);
mMapView = (MapView)findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
bitmapDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding);
bdGround = BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding);
initOverlay(locations);
mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker m) {
for(int index = 0; index < locations.length; index++){
if(m == marker[index]){
locationName.setText("地点: "+locations[index].getName());
locationTime.setText("时间: " +locations[index].getTime());
Toast.makeText(getApplicationContext(), locations[index].getName()+"\n", Toast.LENGTH_LONG).show();
infoPopupWindow.showAtLocation(mMapView, Gravity.CENTER, 0, 0);
}
}
return true;
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void initOverlay(LocationOfPhoto locations[]){
int count = locations.length;
LatLng latLngs;
LatLngBounds bounds = null;
double min_latitude = 0, min_longitude = 0,
max_latitude = 0, max_longitude = 0;
for(int i = 0; i < count-1; i++){
if(locations[i].getLocation().latitude <= locations[i+1].getLocation().latitude){
min_latitude = locations[i].getLocation().latitude;
max_latitude = locations[i+1].getLocation().latitude;
}
else {
min_latitude = locations[i+1].getLocation().latitude;
max_latitude = locations[i].getLocation().latitude;
}
if(locations[i].getLocation().longitude <= locations[i+1].getLocation().longitude){
min_longitude = locations[i].getLocation().longitude;
max_longitude = locations[i+1].getLocation().longitude;
}
else {
min_longitude = locations[i+1].getLocation().longitude;
max_longitude = locations[i].getLocation().longitude;
}
}
marker = new Marker[count];
for(int i = 0; i < count; i++){
latLngs = locations[i].getLocation();
OverlayOptions overlayOptions_marker = new MarkerOptions().position(latLngs).icon(bitmapDescriptor);
marker[i] = (Marker)(mBaiduMap.addOverlay(overlayOptions_marker));
}
LatLng southwest = new LatLng(min_latitude, min_longitude);
LatLng northeast = new LatLng(max_latitude, max_longitude);
LatLng northwest = new LatLng(max_latitude, min_longitude);
LatLng southeast = new LatLng(min_latitude, max_longitude);
bounds = new LatLngBounds.Builder().include(northeast).include(southwest).include(southeast).include(northwest).build();
MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLngBounds(bounds);
mBaiduMap.animateMapStatus(mapStatusUpdate,1000);
MapStatusUpdate mapStatusUpdate_zoom = MapStatusUpdateFactory.zoomTo(5);
mBaiduMap.setMapStatus(mapStatusUpdate_zoom);
}
}
import com.baidu.mapapi.model.LatLng;
public class LocationOfPhoto {
private String name;
private String time;
private LatLng location;
public LocationOfPhoto() {
name = "";
time = "";
location = null;
}
public LocationOfPhoto(String name, String time, LatLng location){
this.name = name;
this.time = time;
this.location = location;
}
public LocationOfPhoto(String name, String time, double latitude, double longitude){
this.name = name;
this.time = time;
location = new LatLng(latitude, longitude);
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the time
*/
public String getTime() {
return time;
}
/**
* @param time the time to set
*/
public void setTime(String time) {
this.time = time;
}
/**
* @return the location
*/
public LatLng getLocation() {
return location;
}
/**
* @param location the location to set
*/
public void setLocation(LatLng location) {
this.location = location;
}
}百度地图开发-将多个地点标记在地图上,点击节点弹出PopupWindow
原文地址:http://blog.csdn.net/luoyhang003/article/details/40842931