我有这个功能在录制标记时显示AlertDialog:
protected boolean onTap(int index) {
db = openHelper.getWritableDatabase();
AlertDialog.Builder dialog = new AlertDialog.Builder(Geo.this);
String[] columns_descri = new String[] {COL_DESCRI};
Cursor cur = db.query(true, TABLE_COORD, columns_descri,null, null, null, null, null, null);
if (cur.moveToPosition(index-1)) {
String description = cur.getString(cur.getColumnIndexOrThrow(COL_DESCRI));
dialog.setTitle("Info.");
dialog.setMessage(description);
dialog.show();
}
db.close();
return true; }
这种方法可以在地图上检索任何点按的触摸:
@Override
public boolean onTouchEvent(MotionEvent event, MapView maMap)
{
//---when user lifts his finger---
if (event.getAction() == 1) {
GeoPoint p = maMap.getProjection().fromPixels(
(int) event.getX(),
(int) event.getY());
Toast.makeText(getBaseContext(),
p.getLatitudeE6() / 1E6 + "," +
p.getLongitudeE6() /1E6 ,
Toast.LENGTH_SHORT).show();
}
return true;
}
问题是当onTouchEvent
返回TRUE时,我无法控制地图,移动它,或在录制标记时显示AlertDialog。如果它是假的,我重新控制地图,但吐司显示很多时间(5或6次)。
什么可能是这个奇怪问题的根源?
答案 0 :(得分:2)
onTap和onTouch事件的布尔值表示操作是否已完全处理。如果返回true,操作系统将停止级联到其他视图(因此您失去对地图的控制权)。当您返回false时,操作系统将查找可以处理触摸事件的其他方法。
答案 1 :(得分:1)
试试这个
@Override
public boolean onTouchEvent(MotionEvent event, MapView maMap)
{
//---when user lifts his finger---
boolean result = false;
if (event.getAction() == 1) {
GeoPoint p = maMap.getProjection().fromPixels(
(int) event.getX(),
(int) event.getY());
Toast.makeText(getBaseContext(),
p.getLatitudeE6() / 1E6 + "," +
p.getLongitudeE6() /1E6 ,
Toast.LENGTH_SHORT).show();
result true;
}
//return (result | super.onTouchEvent(event, mapView));
return result;
}
答案 2 :(得分:0)
在每个触摸事件上调用OnTouchEvent。 按,拖动(许多事件),释放。 因此,你的祝酒词显示了很多。 仅在if子句内返回true,否则返回false。 那应该解决它。