如何改变百度地图在定位自己时的默认蓝色圆圈?

如何改变百度地图在定位自己时的默认蓝色圆圈?
Overlay:覆盖物的抽象基类,所有的覆盖物均继承此类的方法,实现用户自定义图层显示。
MyLocationOverlay:一个负责显示用户当前位置的Overlay。
第一种方法很简单,我们只需要创建一个继承MyLocationOverlay的类重写其drawMyLocation方法即可.

protected void drawMyLocation(android.graphics.Canvas canvas,
                              MapView mapView,
                              android.location.Location lastFix,
                              GeoPoint myLocation,
                              long when)
绘制“我的位置”点。默认情况下,绘制一个动画的“蓝色点”,可能由一个蓝色圆盘所围绕来标识精度。而且, 如果用户的位置移动到屏幕的边缘,我们已经在构造函数力提供了一个 MapController , 将使用滚动来重新确定地图的中心。
Parameters:
canvas - 待绘制的画布。
mapView - 调用绘制方法的mapView。
lastFix - 最后一个收到的位置信息。
myLocation - 最后一个位置的坐标,萃取成为一个方便的GeoPoint 。
when - 绘制的时间,毫秒。

[java
@Override 
    protected void drawMyLocation(Canvas canvas, MapView mapView, 
            Location lastFix, GeoPoint myLocation, long when) { 
        try { 
            Projection projection = mapView.getProjection(); 
            Point point = new Point(); 
            projection.toPixels(myLocation, point); 
 
            int x = point.x - bitmap.getWidth() / 2; 
            int y = point.y - bitmap.getHeight(); 
            canvas.drawBitmap(bitmap, x, y, new Paint()); 
 
        } catch (Exception e) { 
            super.drawMyLocation(canvas, mapView, lastFix, myLocation, when); 
        } 
    } 
这里简单说明一下:point获取到的是我们在屏幕上的点.而我们要显示的图标应该在这个点的正上方,因此x,y的计算大家都不难理解了.
接下来的操作和原来的一样,只需要调用即可.
[java] 
/***
     * 初始化map
     */ 
    void InitMap() { 
        bMapManager = new BMapManager(this); 
        bMapManager.init(Key, this); 
        super.initMapActivity(bMapManager); 
 
        mMapView = (MapView) findViewById(R.id.bmapsView); 
        mMapView.setBuiltInZoomControls(true); // 设置启用内置的缩放控件 
        mMapView.setDrawOverlayWhenZooming(true);// 缩放图标仍然show 
 
        mMapController = mMapView.getController(); 
         
        mMapController.setZoom(16); // 设置地图zoom级别 
    } 

[java] 
/***
     * 添加自己的overlay
     */ 
    void addMyOverLay() { 
        locationOverlay = new LocationOverLay(MainActivity.this, mMapView); 
        overlays = mMapView.getOverlays(); 
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), 
                R.drawable.location); 
        locationOverlay.setBitmap(bitmap); 
        overlays.add(locationOverlay); 
    } 

[java] 
@Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        setTitle("jjhappyforever..."); 
        InitMap(); 
        addMyOverLay(); 
 
    } 
 
    @Override 
    protected void onDestroy() { 
        if (bMapManager != null) { 
            bMapManager.destroy(); 
            bMapManager = null; 
        } 
        super.onDestroy(); 
    } 
 
    @Override 
    protected void onPause() { 
        if (bMapManager != null) { 
            bMapManager.getLocationManager().removeUpdates(this); 
            locationOverlay.disableMyLocation(); 
            locationOverlay.disableCompass(); // 打开指南针 
            bMapManager.stop(); 
        } 
        super.onPause(); 
    } 
 
    @Override 
    protected void onResume() { 
        if (bMapManager != null) { 
            bMapManager.getLocationManager().requestLocationUpdates(this); 
            locationOverlay.enableMyLocation(); 
            locationOverlay.enableCompass(); // 打开指南针 
            bMapManager.start(); 
        } 
 
        super.onResume(); 
    } 
[java] 
/***
     * Location 监听
     * 
     * @param arg0
     */ 
    @Override 
    public void onLocationChanged(Location location) { 
        // 获取自己的经纬度点 
        GeoPoint geoPoint = new GeoPoint((int) (location.getLatitude() * 1e6), 
                (int) (location.getLongitude() * 1e6)); 
        mMapController.setCenter(geoPoint); 
         
    } 
定位居中显示.
示例显示:


第二种方案:
我们bMapManager.getLocationManager().requestLocationUpdates(this);获取自身的GeoPoint.那么我们可以根据该GeoPoint创建一个Overlay.其实MyLocationOverlay是Overlay的一个子类,这样我们就不难理解了。发话不多说了,
在这里我们根据自身的GeoPoint添加一个Overlay
[java]
/***
     * Location 监听
     * 
     * @param arg0
     */ 
    @Override 
    public void onLocationChanged(Location location) { 
        // 获取自己的经纬度点 
        GeoPoint geoPoint = new GeoPoint((int) (location.getLatitude() * 1e6), 
                (int) (location.getLongitude() * 1e6)); 
        mMapController.setCenter(geoPoint); 
         addOverLay(geoPoint); 
    } 

[java]
/***
     * 添加overlay
     */ 
    void addOverLay(GeoPoint geoPoint) { 
        overlays = mMapView.getOverlays(); 
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), 
                R.drawable.location); 
        overlay = new MyOverlay(mMapView, bitmap); 
        overlay.setGeoPoint(geoPoint); 
        overlays.add(overlay);//添加自定义overlay 
    } 

[java]
public class MyOverlay extends Overlay { 
    private MapView mapView; 
    private Projection projection; 
    private Point point;// 屏幕对象的点 
    private Bitmap bitmap; 
 
    private GeoPoint geoPoint;// 经纬度点 
 
    public void setGeoPoint(GeoPoint geoPoint) { 
        this.geoPoint = geoPoint; 
    } 
 
    public MyOverlay(MapView mapView, Bitmap bitmap) { 
        super(); 
        this.mapView = mapView; 
        this.bitmap = bitmap; 
    } 
 
    @Override 
    public void draw(Canvas canvas, MapView arg1, boolean arg2) { 
        projection = mapView.getProjection(); 
        point = new Point(); 
        projection.toPixels(geoPoint, point);// 将GeoPoint 转换成point. 
        int x = point.x - bitmap.getWidth() / 2; 
        int y = point.y - bitmap.getHeight(); 
 
        canvas.drawBitmap(bitmap, x, y, new Paint()); 
    } 

示例显示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值