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 の影が本来あるべき単純な灰色の半透明のオーバーレイではないことです。代わりに、カラー フィルターとテキストが影にも適用されます。この問題を回避する方法について何か提案はありますか?