0

到目前为止,我总是在 MapActivity 中使用 OverlayItems 和我制作的类 Point 绘制“点”。使用这种方法,我可以在 MapActivity 中绘制一些“点”。但是我如何绘制“可点击”点?

我即兴创作了这个类 Point,并遵循有关 OverlayItems 方法的教程,但我可以实现任何你自己为这个“可点击点”解释我的方法。

谢谢。

4

2 回答 2

0

以这个项目为例,看看如何实现可点击的 OverlayItems https://github.com/jgilfelt/android-mapviewballoons

于 2012-11-04T20:53:24.053 回答
0

我找不到这样做的方法,所以我编写了自己的点击逻辑。这是来自我现在搁置的一个项目,并且正在进行中(例如硬编码值),但逻辑有效。希望能帮助到你:

      @Override
  public boolean onTap(GeoPoint geoPoint, MapView mapView){

      if (!isRoute){ // nothing to do if it's a route

          Cursor cursor = (Cursor) mapView.getTag();
          Projection projection = mapView.getProjection();

          // get pixels for the point clicked
          Point clickedPoint = new Point();
          projection.toPixels(geoPoint, clickedPoint);

          if (cursor.moveToFirst()){
                do {

                    try {
                        Double lat = cursor.getFloat(Database.LAT_COLUMN) * 1E6;
                        Double lng = cursor.getFloat(Database.LONG_COLUMN) * 1E6;
                        GeoPoint thisGeoPoint = new GeoPoint(lat.intValue(), 
                                                             lng.intValue());

                        // get pixels for this point
                        Point overlayPoint = new Point();
                        projection.toPixels(thisGeoPoint,overlayPoint);

                        // did the user click within 30 pixels?
                        if ((Math.abs(clickedPoint.x - overlayPoint.x) < 30) && (Math.abs(clickedPoint.y - overlayPoint.y) < 30)){

                            // get a cursor to this record
                            Cursor thisCursor = TestApp.db.rawQuery("SELECT * FROM " + Database.DATABASE_TABLE_PINS + " WHERE CID='" + cursor.getString(Database.ID_COLUMN) + "'", null);
                            thisCursor.moveToFirst();

                            // create and show an instance of the PinDetailsDialog
                            PinDetailsDialog customiseDialog ;
                            // TODO this is a kludge, why does this throw an exception sometimes?
                            try{
                                customiseDialog = new PinDetailsDialog(mapView, context,thisCursor,context.getResources().getConfiguration().orientation);
                                customiseDialog.show(); 
                            } catch (Exception e){
                                customiseDialog = new PinDetailsDialog(mapView, mapView.getContext(),thisCursor,context.getResources().getConfiguration().orientation);
                                customiseDialog.show(); 
                            }               

                            return true;
                        }


                    } catch (Exception e){
                        e.printStackTrace();
                    }

                } while(cursor.moveToNext());       
          }

      }
      return true;

  }

基本思想是获取用户在地图上单击的点,将该点转换为经纬度,然后迭代我的数据点以寻找匹配项。请注意,我正在使用 +/- 30 像素的命中测试(当我再次选择它时,我不会硬编码。

我把 TODO 留在了那里,以防你偶然发现类似的东西,但我怀疑这完全是我的 PinDetailsDialog 类实现中的某个问题。

我使用多个地图视图,每个地图视图都使用存储在 SQLite 表中的数据。我存储对游标的引用以读取 Mapview 的 tag 属性中的数据,因此调用 .getTag() 。

于 2012-11-04T20:54:21.093 回答