作者:潘巧军_837 | 来源:互联网 | 2023-02-04 13:43
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覆盖...
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 个解决方案