Mapview onTap没有为OverlayItem onTap触发

时间:2011-05-23 13:22:14

标签: android android-mapview trackball

我的应用程序中有一个mapview,一切都在使用touchEvents。

然而,为了最大限度地提高App的用户,我一直在尝试添加trackBall界面功能,并遇到了问题。

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

当我单击鼠标按钮(我正在使用模拟器)来模拟轨迹球用户点击(F6接合轨迹球)时没有任何反应.. onTrackBallEvent代码在这种情况下永远不会被触发,我希望给定API docs说在这个实例中应该触发onTap,但它也不会被触发。

如果我不在overlayItem的中心,我会在onTrackBallEvent中获得ACTION_DOWN和ACTION_UP事件,只有当地图以OverlayItem为中心时才会触发onTrackBallEvent。不幸的是,onTap Events也没有被解雇。当叠加层位于屏幕中心并且用户点击轨迹球时,操作系统显然正在利用这些点击做一些事情,但如果我能弄清楚它是什么,我会很沮丧。

有谁知道我应该寻找什么事件?

3 个答案:

答案 0 :(得分: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;

} 

答案 1 :(得分: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") {

答案 2 :(得分:0)

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