0

我的应用程序中有一个地图视图,并且一切都与 touchEvents 一起工作得非常好。

但是,为了最大限度地提高应用程序的用户使用率,我一直在尝试添加轨迹球界面功能,但遇到了问题。

轨迹球在焦点对准时正确滚动 mapView,但是当用户以覆盖项为中心时,我无法触发 onTap 事件。

当我单击鼠标按钮(我正在使用模拟器)模拟轨迹球用户的点击(F6 启用轨迹球)时,什么也没有发生。在这种情况下,onTrackBallEvent 代码永远不会被触发,鉴于 API 文档说,我希望在这种情况下应该触发 onTap,但它也不会被触发。

如果我没有以overlayItem 为中心,我确实会在onTrackBallEvent 中获得ACTION_DOWN 和ACTION_UP 事件,只有当地图以OverlayItem 为中心时,onTrackBallEvent 才会被触发。不幸的是 onTap 事件也没有被触发。显然,当覆盖层位于屏幕中心下方并且用户单击轨迹球时,操作系统正在对这些点击进行操作,但如果我能弄清楚它是什么,我会很高兴。

有谁知道我应该寻找什么活动?

4

3 回答 3

1

这是一个相当古老的问题,但我想我会给我的 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;

} 
于 2012-09-18T22:02:42.173 回答
0

因为它适用于此。我检查屏幕上的命中点是否与某些叠加项目匹配。

        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-23T13:43:04.130 回答
0

请试试这个。这用于在地图视图上显示多个叠加层,可能会解决问题:https ://github.com/donnfelker/android-mapviewballoons

于 2011-05-24T06:29:55.443 回答