我的应用程序中有一个地图视图,所有的东西在touchEvents上都运行得很好。
然而,为了最大限度地提高应用程序的使用率,我一直在尝试添加trackBall界面功能,但遇到了一个问题。
当轨迹球处于焦点时,它会正确地滚动mapView,但是当用户将焦点放在覆盖项上时,我无法触发onTap事件。
当我点击鼠标按钮(我正在使用模拟器)来模拟轨迹球用户(F6已加入轨迹球)的点击时,没有任何反应。在这种情况下,onTrackBallEvent代码永远不会触发,这是我所期望的,因为API文档说在这种情况下应该触发onTap,但它也不会触发。
如果我不是以overlayItem为中心,我会在onTrackBallEvent中获得ACTION_DOWN和ACTION_UP事件,只有当地图以OverlayItem为中心时,onTrackBallEvent才不会被触发。不幸的是,onTap事件也不会被触发。很明显,当覆盖在屏幕中央,用户点击轨迹球时,操作系统会用这些点击来做一些事情,但如果我能弄清楚它是什么,我会很高兴的。
有人知道我应该找什么活动吗?
发布于 2012-09-19 06:02:42
这是一个相当古老的问题,但我想我会给出我的2美分。出于某些原因,您需要在地图上的某个位置添加一个覆盖,然后onTap()覆盖才能在您单击的位置添加其他覆盖。我使用:
public boolean onTap(GeoPoint p, MapView mapView) {
boolean tappedAnOverlay = super.onTap(p, mapView);
if (tappedAnOverlay) {
// do your thing if hit an overlay
}
else {
// no overlay found in that location
}
MapController mc = mapView.getController();
mc.animateTo(p);
return true;
} 发布于 2011-05-23 21:43:04
因为它可以和这个一起工作。我检查屏幕上的点击点是否与某个覆盖项匹配。
public boolean onTouchEvent(MotionEvent event, MapView mv) {
final int action=event.getAction();
final int x=(int)event.getX();
final int y=(int)event.getY();
if(!this.marker.equals(getResources().getDrawable(R.drawable.parada))){
if (action == MotionEvent.ACTION_DOWN) {
for (OverlayItem item : mItems) {
Point p = new Point(0,0);
mv.getProjection().toPixels(item.getPoint(), p);
if (hitTest(item, marker, x-p.x, y-p.y) && item.getSnippet()!= "parada") {发布于 2011-05-24 14:29:55
请试一下这个。这是用来在地图视图上显示多个叠加的,可能会解决这个问题:https://github.com/donnfelker/android-mapviewballoons
https://stackoverflow.com/questions/6097781
复制相似问题