2

我的 android 应用程序中有一个大图像,它代表了一个真实的图片设备。现在我想知道,执行以下操作的最佳方法是什么:

  • 将某些特定图像扇区标记为可点击
  • 可视化预览点击事件(就像一个普通的 android 按钮)

我想过类似 http://catchthecows.com/?p=113的“imagemap”类似解决方案。但它没有突出显示点击的部分(对我来说是必要的)。创建处理突出显示效果的“n”个不同的图片是不可能的,或者说非常复杂(例如:第 1 部分被点击 - 所以突出显示它,第 2 部分被点击 - 所以突出显示它......)。

任何建议都会很棒。

非常感谢。

顺便说一句:我的图像如下所示(红色部分应该是可点击的)。 在此处输入图像描述

4

1 回答 1

1

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

于 2013-03-05T19:45:35.280 回答