我快速浏览了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
,因为区域边界信息存储在子类中。