【问题标题】:android divide image into sub images ,recognizingandroid将图像划分为子图像,识别
【发布时间】:2015-10-30 19:27:02
【问题描述】:

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

提前谢谢你

【问题讨论】:

    标签: android imageview divide regions


    【解决方案1】:

    在我看来,@fractalwrench 的想法非常适合您的情况。下面列出了基本步骤。

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

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

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

    • 要在主图像上绘制路径,您还应该覆盖ImageView 类的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);
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2012-04-24
        • 1970-01-01
        • 2018-10-08
        • 2010-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-15
        相关资源
        最近更新 更多