直到现在,我总是画"积分"在MapActivities中使用OverlayItems并使用我创建的类Point。通过这种方法,我可以画出一些"点"在MapActivity中。但我如何绘制"可点击"点?
我即兴创作了这个类Point,并按照有关OverlayItems方法的教程,但我可以实现任何你自己为此解释的方法"可点击的点"。
感谢。
答案 0 :(得分:0)
以该项目为例,了解如何实现可点击的OverlayItems https://github.com/jgilfelt/android-mapviewballoons
答案 1 :(得分: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的tag属性中的数据,因此调用.getTag()。