ImageMap
ご提供いただいたソースをざっと拝見しました。
のonDraw()
方法は次のImageMap
とおりです。
/**
* Paint the view
* image first, location decorations next, bubbles on top
*/
@Override
protected void onDraw(Canvas canvas) {
drawMap(canvas);
drawLocations(canvas);
drawBubbles(canvas);
}
したがって、コメントが述べているように、最初に完全な画像が描画され、次に「場所の装飾」(特に関心のある領域と思われる) が続き、最後に領域の「バブル」が描画されます。これは基本的に、選択可能な領域であり、あなたには適用されない場合があります。
「場所の装飾」の描画方法を見てみましょう。
protected void drawLocations(Canvas canvas) {
for (Area a : mAreaList) {
a.onDraw(canvas);
}
}
そして最後に、Area
オブジェクト (定義可能で選択可能な画像領域) の描画方法:
// an onDraw is set up to provide an extensible way to
// decorate an area. When drawing remember to take the
// scaling and translation into account
public void onDraw(Canvas canvas) {
if (_decoration != null) {
float x = (getOriginX() * mResizeFactorX) + mScrollLeft - 17;
float y = (getOriginY() * mResizeFactorY) + mScrollTop - 17;
canvas.drawBitmap(_decoration, x, y, null);
}
}
ImageMap
クラスを使用して、必要な機能のほとんどを処理するのが最善の策だと思います。Area.onDraw()
提供されたメソッドを使用して、領域の「ハイライト」を処理できます。「装飾ビットマップ」を描画する代わりに、Area
クラスまたはサブクラスで定義された形状情報を使用し、Canvas
メソッドを使用して、選択した領域に透明なハイライト マスクを描画します。
編集:領域の境界情報はサブクラスに格納されるため、サブクラスonDraw()
ごとに個別の実装が必要になります。Area