2013-01-15 96 views
0

好的,我已经使用谷歌,并没有找到任何解决我的问题,我有一个MapView多个多边形和一切正确显示在地图上。我试图做的是添加一个onTap以显示有关该多边形的信息,但是我无法识别多边形上的多边形。以下是我目前拥有的。有人能告诉我在onTap部分我做错了什么吗?Android多边形覆盖ontap

public class Polygon extends Overlay { 
ArrayList<GeoPoint> geoPoints; 
static ArrayList<String> custCount; 
static ArrayList<String> hexCode; 
static ArrayList<String> custMin; 
static ArrayList<String> custMax; 
static String tester; 
Point firstPoint; 
static List<HashMap<String, String>> colorRanges; 

private Path path; 

public Polygon(ArrayList<GeoPoint> points){ 
    geoPoints = points; 
} 
public class setColorRanges{ 



public setColorRanges(List<HashMap<String, String>> colorData) { 

    colorRanges = colorData; 
    } 

} 

public class CustCount{ 
    public CustCount(ArrayList<String> str) { 
     custCount = str; 
    } 
} 

@Override 
public void draw(Canvas canvas, MapView mapView, boolean shadow){ 


    //Set the color and style 
    Paint paint = new Paint(); 
    Paint paint1 = new Paint(); 

    //Create path and add points 

    int origin = 0; 
    for(int i = 0; i < geoPoints.size()/5;i++){ 
     path = new Path(); 
     firstPoint = new Point(); 

     mapView.getProjection().toPixels(geoPoints.get(origin), firstPoint); 
     path.moveTo(firstPoint.x, firstPoint.y); 

     for(int j=0; j<5; j++) { 
      Point nextPoint = new Point(); 
      mapView.getProjection().toPixels(geoPoints.get(origin+j), nextPoint); 
      path.lineTo(nextPoint.x, nextPoint.y); 

     } 
     //loop thru array of color ranges 
     int curCustCount = Integer.valueOf(custCount.get(i)); 
     String curColor = ""; 
     for(int z=0; z<colorRanges.size(); z++) { 
      int custmin = Integer.valueOf(colorRanges.get(z).get("custmin")); 
      int custmax = Integer.valueOf(colorRanges.get(z).get("custmax")); 

      if(curCustCount >= custmin && curCustCount <= custmax) { 
       curColor = colorRanges.get(z).get("hexcode"); 
       break; 
      } 
     } 

     paint.setColor(Color.parseColor(curColor)); 
     paint.setAlpha(70); 
     paint.setStyle(Paint.Style.FILL); 
     paint1.setColor(Color.parseColor(curColor)); 
     paint1.setAlpha(100); 
     paint1.setStyle(Paint.Style.STROKE); 

     path.lineTo(firstPoint.x, firstPoint.y); 
     path.setLastPoint(firstPoint.x, firstPoint.y); 
     canvas.drawPath(path, paint); 
     canvas.drawPath(path,paint1); 

     origin += 5; 
    } 

    super.draw(canvas, mapView, shadow); 
} 
@Override 
public boolean onTap(GeoPoint geoPoint, MapView mapView) { 

    RectF rectF = new RectF(); 
    path.computeBounds(rectF, true); 
    Region region = new Region(); 
    region.setPath(path, new Region((int) rectF.left, (int) rectF.top, (int) rectF.right, (int) rectF.bottom)); 

    Point point = new Point(); 
    mapView.getProjection().toPixels(geoPoint, point); 

    if (region.contains(point.x, point.y)) { 
     Log.d("onTap", point.x+" "+point.y); 
    } 

    return super.onTap(geoPoint, mapView); 
} 

} 

回答

0

你重用你path变量onDraw(),你有 -

path = new Path(); 

当你到onTap()只有最后一个路径,你画将被保存为path一部分。所以你只会注册最后一个多边形的点击。如果您稍后需要所有路径,则应将其保存在List或其他集合中,并在onTap()中迭代它们。

或者,您可以将多边形渲染为单个的Path,并且只绘制并测试一次。你所遇到的问题是不知道哪个多边形被点击了,只是其中一个是。