【问题标题】:How the onTap works in android mapviewonTap 如何在 android mapview 中工作
【发布时间】:2012-07-19 12:23:58
【问题描述】:

即使地图视图被移动,onTap 监听器如何在 android 地图视图中工作。 实际上我正在根据用户方向旋转地图视图。

我从 sesor 经理那里得到了方位角。

如果角度为 0,则 onTap 可以在 Pin 上正常工作。如果更改角度说 20 onTap 不能完全在 pin 上工作,它会在一段时间后在 pin 旁边工作。

我采取了旋转视图,我采取了地图视图。现在我在轴承更改后旋转旋转视图。

RotateView 设置方位代码

 @Override
    protected void dispatchDraw(Canvas canvas) {

        canvas.save(Canvas.MATRIX_SAVE_FLAG);

    //if mHeading is zero its work otherwise onTap position is changing 
        canvas.rotate(mHeading, getWidth()/2, getHeight());

        mCanvas.delegate = canvas;
        super.dispatchDraw(mCanvas);
        canvas.restore();
    }

覆盖类

public class SonarOverlay1 extends ItemizedOverlay<OverlayItem>
{
    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
    private Context mContext;
public SonarOverlay1(Drawable defaultMarker,Context context) {
    super(boundCenter(defaultMarker));
    this.mContext=context;

    populate();
}

@Override
protected OverlayItem createItem(int arg0) {

    return  mOverlays.get(arg0);
}
public void addOverlay(OverlayItem item) {
    mOverlays.add(item);
    populate();

}

@Override
public int size() {
//Log.e("overlay size..",""+mOverlays.size());
    return mOverlays.size();
}


@Override
protected boolean onTap(int index) {
    // TODO Auto-generated method stub

      OverlayItem item = mOverlays.get(index);
      AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
      dialog.setTitle(item.getTitle());
      dialog.setMessage(item.getSnippet());
      dialog.show();
      return true;
}
}

【问题讨论】:

标签: android map


【解决方案1】:

看看

中的 MapsDemo 示例

ANDROID_SDK\add-ons\addon-google_apis-google_inc_-7\samples\MapsDemo。

它有旋转地图演示。

旋转 MapView 的最简单方法

谢谢。

【讨论】:

  • 如需进一步解释,您可以发表评论,如果它有助于您不要忘记接受我的回答并投票给我 :) 谢谢。
  • 我用过,如果轴承角度为 0,它的工作如果轴承被改变,它不能完全在销上工作
  • 你能把你的代码sn-p贴在这里,这样我就可以找出你的问题,因为我已经用了好几次了,上面的教程没有让我失望。谢谢
  • 我已经编辑了我的代码来旋转 mapView 请参考我的回答。谢谢 :)
  • 我得到了解决方案,感谢您的支持和快速响应
【解决方案2】:

在旋转地图时,我们还必须使用 onDispatchTouch 方法旋转触摸事件和地图

见下面的代码

@Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        float[] coords = new float[] {
                event.getX(), event.getY()
        };
        adjustCoords(coords, getRotation());
        MotionEvent evt = MotionEvent.obtain(event.getDownTime(), event.getEventTime(), event
                .getAction(), coords[0], coords[1], event.getPressure(), event.getSize(), event
                .getMetaState(), event.getXPrecision(), event.getYPrecision(), event.getDeviceId(),
                event.getEdgeFlags());
        return super.dispatchTouchEvent(evt);
    }
    protected void adjustCoords(float[] coords, float deg) {
        float x = coords[0];
        float y = coords[1];
        int centerX = getWidth() / 2;
        int centerY = getHeight() / 2;
        // convert to radians
        float rad = (float) ((deg * Math.PI) / 180F);
        float s = (float) Math.sin(rad);
        float c = (float) Math.cos(rad);
        // translate point back to origin:
        x -= centerX;
        y -= centerY;
        // apply rotation
        float tmpX = x * c - y * s;
        float tmpY = x * s + y * c;
        x = tmpX;
        y = tmpY;
        // translate point back:
        x += centerX;
        y += centerY;
        coords[0] = x;
        coords[1] = y;
    }

请参考以下链接

How to manage overlays in MapViewCompassDemo in android sdk samples

【讨论】:

    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多