我的Android应用程序中有一个大图像,代表一个真实的图片设备。 现在我想知道,最好的方法是做什么:
我已经想过像“imagemap”类似的解决方案了 http://catchthecows.com/?p=113。 但它没有突出显示点击的部分(对我来说是必要的)。 创建处理突出显示效果的“n”个不同图片是不可能的,或者说非常复杂(例如:第1部分点击 - 因此突出显示它,第2部分点击 - 因此高亮显示它......)。
任何建议都会很棒。
非常感谢。
顺便说一下: 我的图像如下所示(红色部分应该是可点击的)。
答案 0 :(得分:1)
我快速查看了您提供的ImageMap
来源。
这是onDraw()
的{{1}}方法:
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()
实现,因为区域边界信息存储在子类中。