2012-11-04 3 views
0

До сих пор я всегда рисую «точки» в MapActivities с помощью OverlayItems и с классом Point, сделанным мной. С помощью этого метода я могу нарисовать некоторые «точки» в MapActivity. Но как я могу нарисовать «кликабельные» точки?Установить метод onClickListener в MapActivity?

Я импровизую этот класс Point и следую учебному пособию по методу OverlayItems, но я могу реализовать любой метод, который вы сами объясните мне для этих «кликабельных точек».

Спасибо.

ответ

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; 

    } 

Основная идея заключается в том, чтобы получить точку, где пользователь нажал на карте, преобразовать точку в Lat Long затем итерация моих точек данных ищут совпадения. Обратите внимание, что я использую тест на удар +/- 30 пикселей (который я не буду жестко кодировать, когда я снова заберу это.

Я оставил TODO там на всякий случай, когда вы натыкаетесь на что-то подобное, но я подозреваю это полностью связано с проблемой где-то в моей реализации класса PinDetailsDialog.

Я использую несколько видов карт, каждый из которых использует данные, хранящиеся в таблице SQLite. Я храню ссылку на курсор для чтения данных в свойстве тега Mapview, следовательно, вызов .getTag().

 Смежные вопросы

  • Нет связанных вопросов^_^