首页 > 其他分享 >Overlay 添加动态效果

Overlay 添加动态效果

时间:2023-06-20 22:03:56浏览次数:36  
标签:canvas yMarker Overlay point private 动态效果 添加 marker public

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);

标签:canvas,yMarker,Overlay,point,private,动态效果,添加,marker,public
From: https://blog.51cto.com/u_16166892/6525384

相关文章

  • 简单的添加item
    很多人不是很理解如何添加数据这里是最简单的一种publicclassDemonstrateextendsListActivity{privatestaticfinalintADD_ITEM=0;privatestaticfinalintREMOVE_ITEM=1;privatestaticfinalintEXIT_ITEM=2;privateArrayAdapter<String>......
  • MapView Overlay Drawable 的使用
    packageorg.yexing.mapdemos;GraphicOverlay.javaimportandroid.graphics.Canvas;//importandroid.graphics.Paint;//importandroid.graphics.RectF;importandroid.graphics.drawable.BitmapDrawable;importandroid.graphics.drawable.Drawable;impor......
  • SAP Commerce Cloud 通过 SmartEdit 添加 Component 的一个例子
    如下图所示:位于ProductListLot内:url:http://localhost:4200/electronics-spa/en/USD/Open-Catalogue/Cameras/Digital-Cameras/Digital-Compacts/c/576观察到的OCC请求:https://localhost:9002/occ/v2/electronics-spa/cms/pages?pageType=CategoryPage&code=576&lang=......
  • .Net Core Mvc 2. VS2022 + Core6.0 + Mvc 添加视图,传递数据
    添加视图找到控制器HelloWorldController的叫Index的Action在上面右键,选择添加视图,选择空,确认后会在Views文件夹下新建一个HelloWorld文件夹,并生成Index.cshtml文件。直接运行 可以看到Index视图有默认的头部内容和底部内容(太长了没截取),这个效果是在Views\Shared文件夹下的_......
  • Overlay mount和bind mount
    1.Overlaymount和bindmount都是Linux中用于挂载文件系统的方式,它们的区别如下:目录结构不同:Overlaymount是将多个文件系统合并成一个虚拟文件系统,而bindmount则是将一个目录挂载到另一个目录上。内容来源不同:Overlaymount的文件内容来自于下层文件系统和上层文件系统的合并,......
  • Unity添加键盘控制代码
    publicclassArrowControl:MonoBehaviour{publicfloatmoveSpeed=5f;//实例化两个Cube并赋予初始位置//cube1=Instantiate(cubePrefab,newVector3(-2f,0.5f,0f),Quaternion.identity);//cube2=Instantiate(cubePrefab,newVector3(2f,0.......
  • Java学习_第一个语法:添加注释
    单行注释://注释内容多行注释:/* 注释内容*/idea软件小技巧:多行注释往往容易找不到重点,可以在要做的事之前加上TODO前缀,idea软件会帮你高亮标注出来。 ......
  • 如何手动添加jar包到maven本地库?
    作为小白,搭建maven工程的时候,最常碰见的一个问题,就是配置的maven库中缺少某个包,看着红色的叉子,心情就很糟了。一位Java大神告诉我这个问题一般是两种解决:1.包确实不存在,或者包的目录下有乱七八糟的文件包不存在说明下载有问题,可能是私服没有,或者网络有问题,没下载完整等等。乱七八......
  • linux2.6内核中如何添加新的文件系统
    《边干边学-linux内核指导》中教授了如何在2.4内核中添加myext2文件系统的方法。2.6内核中文件组织稍有变化,通过试验,方法如下:1.将fs/ext2拷贝一份为fs/myext22.cdfs/myext23.sed-i"s/ext2/myext2/g"*     //将fs/myext2目录下出现的所有ext2替换为myext24.sed-i"......
  • 视频素材的上下图水印如何一键批量添加
    有时候我们可以给自己拍摄的一些原创视频素材添加上下图水印,这样可以让视频的内容更丰富更有层次感,内容也更加丰富。今天小编就来分享如何制作带上下图水印的视频文件,一起来看看吧。首先要先在电脑上安装一款辅助软件“固乔剪辑助手”,在“固乔科技”的官网上直接下载安装就可以。下......