android将图像划分为子图像,识别

时间:2015-10-30 19:27:02

标签: android imageview divide regions

我想将图像划分为子图像,当我点击图像的一部分时会给我区域的名称,例如,这是我的问题如何识别图像中的区域,或者如何将图像划分为子图像并在imageViews中使用

提前谢谢你

2 个答案:

答案 0 :(得分:1)

在我看来,@ fractalwrench的想法非常适合你的情况。基本步骤如下:

  • 子类Android ImageView。例如,MultiRegionImageView
  • 覆盖其onTouchEvent方法。 (只要用户触摸视图,就会调用此方法)
  • 用户触摸图像,从而调用onTouchEvent并提供精确的触摸点(x,y)。

  • 声明另一个确定给定点位于哪个区域的方法或接口。例如,getRegionByPoint(int x, int y)

  • 如果您想突出显示区域边界,可以使用路径。首先,您应该定义路径并将它们保存到原始文件(例如XML)中,然后使用区域ID,获取其路径并最终在主图像上绘制该路径。

  • 要在主图片上绘制路径,您还应覆盖onDraw类的ImageView方法并使用canvas.drawPath();

public class MultiRegionImageView extends ImageView {
    RegionProvider mRegionProvider;
    int mId = -1;
    private Paint mPaint;

    public MultiRegionImageView(Context context) {
        super(context);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        mId = mRegionProvider.getRegionIdByPoint(event.getX(), event.getY());
        return super.onTouchEvent(event);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if(mId != -1) {
            canvas.drawPath(mRegionProvider.getRegionBoundaryPath(mId), mPaint);
        }
    }

    public interface RegionProvider{
        int getRegionIdByPoint(float x, float y);
        Path getRegionBoundaryPath(int id);
    }
}

答案 1 :(得分:0)

您应该只需要一个ImageView来显示地图。如果您覆盖onTouchEvent(MotionEvent e),则可以获取在视图中触摸的位置。如果您将某个区域的位置和形状存储在某种列表中,则可以检查触摸事件是否在某个区域内(并显示您需要的任何文本)。