gpt4 book ai didi

android - onTap 如何在 android mapview 中工作

转载 作者:行者123 更新时间:2023-11-29 22:02:40 32 4
gpt4 key购买 nike

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

我正在从 sesor 经理那里获取方位角。

如果角度为 0,则 onTap 在 Pin 上正常工作。如果角度发生变化,比如 20 onTap 在 pin 上不能准确工作,它会在 pin 旁边工作一段时间后。

我在里面使用了旋转 View ,我使用了 mapview。现在我在方位改变后旋转 rotateview。

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;
}
}

最佳答案

这里在旋转 map 时我们必须使用 onDispatchTouch 方法连同 map 一起旋转触摸事件

看下面的代码

@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

关于android - onTap 如何在 android mapview 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11560837/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com