Overlay 添加动态效果

public class MyLocationOverlay extends Overlay { 
 
   
private Canvas canvas; 
   
private final Handler handler = new Handler(); 
   
private Runnable runnable; 
   
private GeoPoint geoPoint; 
   
private int xMarker, yMarker; 
   
private int markerNumber = 0; 
   
private Bitmap marker, marker0, marker1, marker2, marker3; 
 
   
public MyLocationOverlay(Context context) { 
       
Resources r = context.getResources(); = BitmapFactory.decodeResource(r, R.drawable.marker); 
        marker1
= BitmapFactory.decodeResource(r, R.drawable.marker1); 
        marker2
= BitmapFactory.decodeResource(r, R.drawable.marker2); 
        marker3
= BitmapFactory.decodeResource(r, R.drawable.marker3); 
        marker
= marker0; 
   
} 
 
   
/** 设置 位置*/ 
   
public void setLocation(GeoPoint geoPoint) { 
       
this.geoPoint = geoPoint; 
   
} 
 
   
/** 设置标记是动态还是静态*/ 
   
public void animateMarker(boolean on) { 
   
if (on) {    // activate animation 
       
if (runnable == null) runnable = new Runnable() { 
           
public void run() { 
               
if (canvas!=null) {                      switch (markerNumber) { 
                   
case 0: marker = marker0; break; 
                   
case 1: marker = marker1; break; 
                   
case 2: marker = marker2; break; 
                   
case 3: marker = marker3; break; 
                   
}
 
                    markerNumber
= ++markerNumber %
4; 
                    canvas
.drawBitmap(marker, xMarker, yMarker,
null); 
                    mapView
.invalidate(xMarker, yMarker,
 
                                    xMarker
+wMarker, yMarker+hMarker);
 
               
}
 
                handler
.postDelayed(
this, 500); 
           
}
 
       
};
 
        handler
.postDelayed(runnable,
500); 
   
}
else {    // 静态

        marker0

        handler.removeCallbacks(runnable); 
        runnable
=
null; 
        marker
= marker0;
 
   
}
 
}
 
 
   
@Override 
   
public void draw(Canvas canvas, MapView mapView, boolean shadow) { 
       
if (shadow == false) { 
           
Projection projection = mapView.getProjection(); 
 
           
// 转换坐标到屏幕像素       
           
Point point = projection.toPixels(geoPoint, null); 
 
           
// 记录canvas 和 标记位置 
           
this.canvas = canvas; 
            xMarker
= point.x - marker.getWidth()/2; 
            yMarker
= point.y - marker.getHeight()/2; 
 
           
// 绘画标记 在位置的中心
            canvas
.drawBitmap(marker, xMarker, yMarker, null); 
       
} 
       
super.draw(canvas, mapView, shadow); 
   
} 
 
   
@Override 
   
public boolean onTap(GeoPoint point, MapView mapView) { return false; } 
} 

 

然后在

MapActivity.onResume() 中调用locationOverlay = MyLocationOverlay(this) 

GeoPoint point = new GeoPoint(latE6, lonE6); 
    locationOverlay
.setLocation(point); 
    locationOverlay
.animateMarker(true); 
    mapView
.getController().animateTo(point); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值