2015-10-30 48 views

回答

1

在我看来@分形扳手的想法对你的情况非常好。下面列出了基本步骤。

  • 子类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); 
    } 
} 
0

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