热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android显示在地图上绘制-Androiddisplaydrawableonthemap

IamtryingtodisplaycustomdrawableonthemapviewbutIcanobserveverystrangebehavior,the

I am trying to display custom drawable on the map view but I can observe very strange behavior, the drawable draws multiple times and the worst thing it displays one time incorrectly. Also this drawable displays perfect with ImageView, but not as MapView overlay...

我试图在地图视图上显示自定义drawable,但我可以观察到非常奇怪的行为,drawable绘制多次,最糟糕的是它显示错误一次。此drawable显示与ImageView完美,但不像MapView覆盖...

enter image description here

Here is my custom drawable:

这是我的自定义drawable:

public class CustomDrawable extends Drawable {
    private Bitmap mBitmap;
    private int mWidth;
    private int mHeight;
    private int mDrawLeft;
    private int mDrawTop;
    private int mColor;

    public ChatIconDrawable(Resources res, int color) {
        this.mColor = color;
        this.mBitmap = BitmapFactory.decodeResource(res, R.drawable.chat_icon);
        this.mWidth = mBitmap.getWidth();
        this.mHeight = mBitmap.getHeight();
        setBounds(-mWidth, -mHeight, 0, 0);
    }

    @Override
    public void draw(Canvas canvas) {
        ShapeDrawable shapeDrawable = new ShapeDrawable(new OvalShape());
        shapeDrawable.getPaint().setColor(mColor);
        shapeDrawable.setBounds(2 - mWidth, 3 - mHeight, mWidth - 2 - mWidth, mHeight - mHeight / 4 - mHeight);
        shapeDrawable.draw(canvas);
        canvas.drawBitmap(mBitmap, mDrawLeft, mDrawTop, null);
    }

    @Override
    public int getOpacity() {
        return PixelFormat.OPAQUE;
    }

    @Override
    public void setBounds(int left, int top, int right, int bottom) {
        mDrawLeft = left + (right - left - mWidth) / 2;
        mDrawTop = top + (bottom - top - mHeight) / 2;
    }

    @Override
    public void setBounds(Rect bounds) {
        super.setBounds(bounds);
    }

    @Override
    public void setAlpha(int alpha) {
//      throw new UnsupportedOperationException(
//              "Not supported with this drawable");
    }

    @Override
    public void setColorFilter(ColorFilter cf) {
//      throw new UnsupportedOperationException("Not supported with this drawable");
    }

    @Override
    public void setDither(boolean dither) {
//      throw new UnsupportedOperationException("Not supported with this drawable");
    }

    @Override
    public void setFilterBitmap(boolean filter) {
//      throw new UnsupportedOperationException("Not supported with this drawable");
    }

    @Override
    public int getIntrinsicWidth() {
        return mWidth;
    }

    @Override
    public int getIntrinsicHeight() {
        return mHeight;
    }

    @Override
    public int getMinimumWidth() {
        return mWidth;
    }

    @Override
    public int getMinimumHeight() {
        return mHeight;
    }
}

Basically custom drawable draws the background with some color (it may vary) and then draws on top static bitmap to produce right figure.

基本上自定义drawable用一些颜色(可能会有所不同)绘制背景,然后在顶部静态位图上绘制以产生正确的图形。

To draw this on the map I use ItemizedOverlay.

要在地图上绘制这个,我使用ItemizedOverlay。

As you can see the problem in that this drawable draws multiple times and with different placement... please advice because it is not clear for me whats wrong. Thank you.

正如你可以看到这个问题,这个drawable绘制了多次,并且有不同的位置...请建议,因为我不清楚是什么错。谢谢。

1 个解决方案

#1


0  

Forget the CustomDrawable class. When you use this (or any other drawable) in an ItemizedOverlay, the overlay will take responsibility for drawing its 'marker' on the map. The marker is set using the OverlayItem.setMarker(Drawable marker) call. So, as well as the overlay drawing the marker, your custom class is also drawing it (in its draw() method). The placement of the marker can be adjusted in the overlay, usually in the constructor of a custom itemized overlay using e.g.

忘记CustomDrawable类。在ItemizedOverlay中使用此(或任何其他可绘制)时,叠加层将负责在地图上绘制其“标记”。使用OverlayItem.setMarker(Drawable marker)调用设置标记。因此,除了绘制标记的叠加层外,您的自定义类也在绘制它(在其draw()方法中)。可以在覆盖图中调整标记的放置,通常在自定义逐项覆盖的构造函数中使用例如。

super(boundCenter(defaultMarker));

This centres the marker on the geo-location rather than offsetting it slightly.

这使得标记在地理位置上居中,而不是稍微抵消它。


推荐阅读
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • 本文介绍了如何通过维持两个堆来获取一个数据流中的中位数。通过使用最大堆和最小堆,分别保存数据流中较小的一半和较大的一半数值,可以保证两个堆的大小差距为1或0。如果数据流中的数量为奇数,则中位数为较大堆的最大值;如果数量为偶数,则中位数为较大堆的最大值和较小堆的最小值的平均值。可以使用优先队列来实现堆的功能。本文还提供了相应的Java代码实现。 ... [详细]
  • JDK8新特性详细介绍[java入门]
    本文由java零基础入门栏目为大家介绍JDK8中的一些新特性,欢迎大家来纠错指正!JDK8中的新特性主要有:1、函数式编程;2、Lambda表达式;3、函数式接口;4、方法引用;5 ... [详细]
  • BitMap的原理和实现方法
    这篇文章主要介绍“BitMap的原理和实现方法”,在日常操作中,相信很多人在BitMap的原理和实现方法问题上存在疑惑,小编查阅了各式资料,整理出简 ... [详细]
  • 从具有确切位置的两个imageView创建位图 - Create bitmap from two imageView with exact location
    MyTarget:Getonephotofromcameraorgallery,thensetittoimageViewA从相机或图库中获取一张照片,然后将其设置 ... [详细]
  • Android 性能优化系列之bitmap图片优化
    在日常开发的APP,大部分时候需要想用户展示图片信息,图片最终对应Android中的Bitmap对象。而对于APP端来说Bitmap又是一个比较麻烦的问题,主要表现在Bitmap是非常占用内存的对象,处理不当将导致APP运行卡顿甚至出现OOM ... [详细]
author-avatar
潘巧军_837
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有