Android MapView 的奇怪阴影行为

发布于 2024-09-13 05:06:53 字数 1132 浏览 6 评论 0原文

我通过子类化 ItemizedOverlay 在 MapView 上放置了几个标记。问题是我传递给 ItemizedOverlay 的标记是自定义的 Drawable。也就是说,我对“Drawable”进行了子类化,并覆盖了draw()方法。这样做的目的是向 Drawable 添加一个颜色过滤器,并添加自定义文本:

public void draw(Canvas canvas) {
    String[] colorComps = color.split(",");
    baseDrawable.mutate().setColorFilter(Color.rgb(Integer.valueOf(colorComps[0]),
                                                   Integer.valueOf(colorComps[1]),
                                                   Integer.valueOf(colorComps[2])),
                                         PorterDuff.Mode.MULTIPLY);
    baseDrawable.draw(canvas);

    Paint textPaint = new Paint();
    textPaint.setTextAlign(Paint.Align.CENTER);
    textPaint.setColor(Color.WHITE);
    textPaint.setAntiAlias(true);
    textPaint.setTextSize(12);
    textPaint.setTypeface(Typeface.DEFAULT);
    int textX = getIntrinsicWidth()/2 - 1 + baseDrawable.getBounds().left;
    int textY = getIntrinsicHeight()/2 + baseDrawable.getBounds().top;
    canvas.drawText(ID, textX, textY, textPaint);
}

问题是,当我这样做时,MapView 上的阴影不是它应该是的简单的灰色、半透明覆盖层。相反,滤色器和文本也应用于阴影。关于如何避免这个问题有什么建议吗?

I am putting several markers on a MapView by subclassing an ItemizedOverlay. The hitch is that the marker I am passing to the ItemizedOverlay is a custom Drawable. That is to say, I've subclassed "Drawable" and I have overwritten the draw() method. The point of this was to add a color filter to the Drawable, and add custom text:

public void draw(Canvas canvas) {
    String[] colorComps = color.split(",");
    baseDrawable.mutate().setColorFilter(Color.rgb(Integer.valueOf(colorComps[0]),
                                                   Integer.valueOf(colorComps[1]),
                                                   Integer.valueOf(colorComps[2])),
                                         PorterDuff.Mode.MULTIPLY);
    baseDrawable.draw(canvas);

    Paint textPaint = new Paint();
    textPaint.setTextAlign(Paint.Align.CENTER);
    textPaint.setColor(Color.WHITE);
    textPaint.setAntiAlias(true);
    textPaint.setTextSize(12);
    textPaint.setTypeface(Typeface.DEFAULT);
    int textX = getIntrinsicWidth()/2 - 1 + baseDrawable.getBounds().left;
    int textY = getIntrinsicHeight()/2 + baseDrawable.getBounds().top;
    canvas.drawText(ID, textX, textY, textPaint);
}

The problem is that when I do this, the shadow on the MapView is not the simple grey, translucent overlay that it should be. Rather, the color filter and text is applied to the shadow as well. Any suggestions on how to avoid this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文