ItemizedOverlay上的 onTap(int i) 事件仅对 1 件物品起火

发布于 2024-12-10 19:01:16 字数 481 浏览 1 评论 0原文

我正在使用 MapView (谷歌的)并在其上添加一些叠加层。 我使用自己的覆盖类,如下所示:

public class MyOverlay extends ItemizedOverlay<OverlayItem>

当我缩小并使所有项目位于同一位置并点击图像时,我仅收到位于点击位置的所有项目中的 1 个 onTap 事件。

我希望能够为我点击的地图上的位置下的每个项目获取 onTap 事件,或者能够向地图询问我按下的特定矩形处的所有项目。

这是我的调试代码:

@Override
protected boolean onTap(int i)
{                
    super.onTap(i);
    return false;           
}

每个覆盖层仅点击 1 次。

是否可以?如何?

谢谢。

I am using a MapView (google's) and add some overlays onto it.
I use my own overlay class which looks like this:

public class MyOverlay extends ItemizedOverlay<OverlayItem>

When I zoom out and cause all my items to be at the same location and tap the image, I get onTap event for only 1 out of all the items ehich are at the tapped location.

I want to be able to get onTap event for each and every item which is under the location on the map which I tap on, or either an ability to ask the map for all items at a specific rectangle where I press.

this is my code for debugging:

@Override
protected boolean onTap(int i)
{                
    super.onTap(i);
    return false;           
}

and get only 1 tap for each overlay.

Is it possible? how?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦萦几度 2024-12-17 19:01:17

一种方法是这样的:(请注意,这是伪代码)

   // Over ride the onTouchEvent
   @Override
    public boolean onTouchEvent(MotionEvent event, final MapView mapView) {
        final int action=event.getAction();
        final int x = (int)event.getX();
        final int y = (int)event.getY();
        if (action == MotionEvent.ACTION_DOWN) {
        // get the zoom level 
        zoomLevel = mapView.getZoomLevel();

        if(zoomLevel > appropriateZoom)
        {
              if(items != null) {
                for(int i = 0; i < items.size(); i++){
                    OverlayItem item = items.get(i);
                    Point mp = new Point(0,0);
                    mapView.getProjection().toPixels(item.getPoint(), mp);
                    xDragTouchOffset=x-mp.x;
                    yDragTouchOffset=y-mp.y;
                    if (hitTest(item, marker, x-(mp.x-(xDragImageOffset+xDragTouchOffset*2)), y-(mp.y-((yDragImageOffset/2)+yDragTouchOffset)))) {
                   // This item has been tapped. Do what you want here. 
         }

        }

这只是一个帮助您入门的想法/提示。

One way is this: (Note that this is pseudo code)

   // Over ride the onTouchEvent
   @Override
    public boolean onTouchEvent(MotionEvent event, final MapView mapView) {
        final int action=event.getAction();
        final int x = (int)event.getX();
        final int y = (int)event.getY();
        if (action == MotionEvent.ACTION_DOWN) {
        // get the zoom level 
        zoomLevel = mapView.getZoomLevel();

        if(zoomLevel > appropriateZoom)
        {
              if(items != null) {
                for(int i = 0; i < items.size(); i++){
                    OverlayItem item = items.get(i);
                    Point mp = new Point(0,0);
                    mapView.getProjection().toPixels(item.getPoint(), mp);
                    xDragTouchOffset=x-mp.x;
                    yDragTouchOffset=y-mp.y;
                    if (hitTest(item, marker, x-(mp.x-(xDragImageOffset+xDragTouchOffset*2)), y-(mp.y-((yDragImageOffset/2)+yDragTouchOffset)))) {
                   // This item has been tapped. Do what you want here. 
         }

        }

This is only a idea/hint to get you started.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文