android 将图像分成子图像,识别
android divide image into sub images ,recognizing
我想把图像分成子图像,当我点击图像的一部分时,会给我区域的名称,例如,这是我的问题如何从图像中识别区域,或者如何将图像分成子图像并在imageViews
中使用
提前谢谢你
您应该只需要一个 ImageView 来显示地图。如果你重写onTouchEvent(MotionEvent e),你可以得到View中被触摸的位置。如果您将每个区域的位置和形状存储在某种列表中,您可以检查触摸事件是否在一个区域内(并显示您需要的任何文本)。
在我看来,@fractalwrench 的想法非常适合您的情况。下面列出了基本步骤。
- 子class Android
ImageView
。例如,MultiRegionImageView
.
- 覆盖其
onTouchEvent
方法。 (每当用户触摸视图时都会调用此方法)
用户触摸图像,从而调用 onTouchEvent
并提供准确的触摸点 (x, y)。
声明另一个方法或接口来确定给定点所在的区域。例如,getRegionByPoint(int x, int y)
如果您想突出显示该区域边界,可以使用路径。首先,您应该定义路径并将它们保存到原始文件中(例如 XML),然后使用区域 ID 获取其路径,最后在主图像上绘制该路径。
要在主图像上绘制路径,您还应该覆盖 ImageView
class 的 onDraw
方法并使用 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);
}
}
我想把图像分成子图像,当我点击图像的一部分时,会给我区域的名称,例如,这是我的问题如何从图像中识别区域,或者如何将图像分成子图像并在imageViews
中使用提前谢谢你
您应该只需要一个 ImageView 来显示地图。如果你重写onTouchEvent(MotionEvent e),你可以得到View中被触摸的位置。如果您将每个区域的位置和形状存储在某种列表中,您可以检查触摸事件是否在一个区域内(并显示您需要的任何文本)。
在我看来,@fractalwrench 的想法非常适合您的情况。下面列出了基本步骤。
- 子class Android
ImageView
。例如,MultiRegionImageView
. - 覆盖其
onTouchEvent
方法。 (每当用户触摸视图时都会调用此方法) 用户触摸图像,从而调用
onTouchEvent
并提供准确的触摸点 (x, y)。声明另一个方法或接口来确定给定点所在的区域。例如,
getRegionByPoint(int x, int y)
如果您想突出显示该区域边界,可以使用路径。首先,您应该定义路径并将它们保存到原始文件中(例如 XML),然后使用区域 ID 获取其路径,最后在主图像上绘制该路径。
要在主图像上绘制路径,您还应该覆盖
ImageView
class 的onDraw
方法并使用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);
}
}