分析过程------------------------------------------------------------------------------------------------------------
地图的中心点?屏幕的中心点?
地图的中心点:
地图移动之后,获取地图的中心点经纬度就可以了。
如何让marker显示在地图的中心点?
地图的中心点是一个什么概念?地图移动之后,中心点的位置是变化的还是不变的?
屏幕的中心点: 除了地图控件以外,还有其他控件, (屏幕坐标转换成地理坐标)
----------------------------------------------------------------------------------------------------------------------------------------------
结果:屏幕中心点就是地图中心点。
如何实现:帧布局(原理:控件的叠加,顺序性)
xml布局中:先放地图View,这样地图充满整个屏幕的,最后把标记物marker放屏幕中心点,在第一个控件和最后一个控件之间放其他控件,比如搜索框之类的。这样能够保证地图中心点和屏幕中心点重合。
检测到地图移动完成,然后获取地图中心点的坐标,就可以了。
这样就实现了地图动,marker不动,地图移动完成之后显示marker当前所指位置的具体信息。
//--------------------------------------------------------------------------------------------------------------------------------------------------------
//设置地图中心点坐标
MapStatusUpdate status = MapStatusUpdateFactory.newLatLng(result.getLocation());
mMapView.getMap().animateMapStatus(status);
//----------------------------------------------------------------------------------------------------------------
// BaiduMap baiduMap = mMapView.getMap();
// LatLng latLng = baiduMap.getMapStatus().target; //获取地图中心点坐标
下面贴代码:
package com.example.dididache;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BaiduMap.OnMapStatusChangeListener;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
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.map.OverlayOptions;
import com.baidu.mapapi.map.TextOptions;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.geocode.GeoCodeOption;
import com.baidu.mapapi.search.geocode.GeoCodeResult;
import com.baidu.mapapi.search.geocode.GeoCoder;
import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
public class MapActivity extends Activity implements
OnGetGeoCoderResultListener {
MapView mMapView = null;
GeoCoder mSearch = null;
BaiduMap mBaiduMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题栏
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);// 去掉信息栏
// //在使用SDK各组件之前初始化context信息,传入ApplicationContext
// 注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
// 获取地图控件引用
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
String mStrName = getIntent().getExtras().getString("name");
String mStrCity = getIntent().getExtras().getString("city");
String mStrDistrict = getIntent().getExtras().getString("district");
// 初始化搜索模块,注册事件监听
mSearch = GeoCoder.newInstance();
mSearch.setOnGetGeoCodeResultListener(this);
mSearch.geocode(new GeoCodeOption().city(mStrCity)
.address(mStrDistrict + mStrName));
mBaiduMap.setOnMapStatusChangeListener(new OnMapStatusChangeListener() {
@Override
public void onMapStatusChangeStart(MapStatus arg0) {
// TODO Auto-generated method stub
}
@Override
public void onMapStatusChangeFinish(MapStatus arg0) {
// TODO Auto-generated method stub
LatLng ptCenter = mBaiduMap.getMapStatus().target; //获取地图中心点坐标
// 反Geo搜索
mSearch.reverseGeoCode(new ReverseGeoCodeOption()
.location(ptCenter));
}
@Override
public void onMapStatusChange(MapStatus arg0) {
// TODO Auto-generated method stub
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
// 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
// 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
// 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
@Override
public void onGetGeoCodeResult(GeoCodeResult result) {
// TODO Auto-generated method stub
//设置地图中心点坐标
MapStatusUpdate status = MapStatusUpdateFactory.newLatLng(result.getLocation());
mBaiduMap.animateMapStatus(status);
Toast.makeText(MapActivity.this, result.getAddress(), Toast.LENGTH_LONG).show();
}
@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {
// TODO Auto-generated method stub
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(MapActivity.this, "抱歉,未能找到结果", Toast.LENGTH_LONG)
.show();
return;
}
mBaiduMap.clear();
mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(result
.getLocation()));//改变地图状态?
Toast.makeText(MapActivity.this, result.getAddressDetail().city + " "+
result.getAddressDetail().district +" "+ result.getAddressDetail().street +
result.getAddressDetail().streetNumber,
Toast.LENGTH_LONG).show();
}
}
布局:
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MapActivity" >
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="@color/black" >
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="搜索框"
android:textColor="@color/lightYellow"
android:textSize="20sp" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon_marka"
android:layout_gravity="center"
/>
demo下载地址: http://download.csdn.net/detail/u010477502/9064585 不求完美,但求对你有用