百度地图SDK for android marker不随地图的移动而移动(仿滴滴打车)


分析过程------------------------------------------------------------------------------------------------------------

  地图的中心点?屏幕的中心点?

   地图的中心点:
                  地图移动之后,获取地图的中心点经纬度就可以了。

              如何让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();


}
}



布局:

    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MapActivity" >


            android:id="@+id/bmapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true" />


            android:id="@+id/searchLayout"
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:background="@color/black" >


                    android:id="@+id/searchKey"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="搜索框"
            android:textColor="@color/lightYellow"
            android:textSize="20sp" />
   


            android:id="@+id/marker"
        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                     不求完美,但求对你有用



你可能感兴趣的:(百度地图SDK for android marker不随地图的移动而移动(仿滴滴打车))