【发布时间】:2015-01-11 21:53:37
【问题描述】:
这是一个奇怪的问题。缩放控件(+ 和 -)仅用于放大和缩小地图的当前中心。有没有办法将这些缩放控件设置为放大和缩小屏幕上不是地图中心的另一个点?我能想到的唯一方法是实现一个 OnCameraChangeListener 并有一个 CameraUpdate 以在每次缩放级别更改时重新定位地图。我认为我不需要任何代码来解释这一点,但请告诉我这是否有帮助..
【问题讨论】:
标签: android google-maps
这是一个奇怪的问题。缩放控件(+ 和 -)仅用于放大和缩小地图的当前中心。有没有办法将这些缩放控件设置为放大和缩小屏幕上不是地图中心的另一个点?我能想到的唯一方法是实现一个 OnCameraChangeListener 并有一个 CameraUpdate 以在每次缩放级别更改时重新定位地图。我认为我不需要任何代码来解释这一点,但请告诉我这是否有帮助..
【问题讨论】:
标签: android google-maps
有一个使用 Canvas 类的方法,通过 SurfaceView 扩展它。这是一个小代码sn-p:
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
canvas.scale(mScaleVector.z, mScaleVector.z); // This is the scale factor as seen below
canvas.translate(mScaleVector.x, mScaleVector.y); // These are offset values from 0,0, both working fine
// Start draw code
// ...
// End draw code
canvas.restore();
}
private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
float factor = detector.getScaleFactor();
if (Math.abs(factor - 1.0f) >= 0.0075f) {
mScaleVector.z *= factor;
mScaleVector.z = Math.max(MIN_ZOOM, Math.min(mScaleVector.z, MAX_ZOOM));
}
// ...
invalidate();
return true;
}
}
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction() & MotionEvent.ACTION_MASK;
int pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
if (event.getPointerCount() == 2) {
if (action == MotionEvent.ACTION_POINTER_DOWN && pointerIndex == 1) {
// The various pivot coordinate codes would belong here
}
}
detector.onTouchEvent(event); // Calls the Scale Gesture Detector
return true;
}
现在这将放大到坐标 (0,0),它是屏幕的原点或左上角,也称为轴心点。要更改轴心点,请将此线更改为代码中所需的缩放点。
canvas.scale(x, y, px, py);
希望这会有所帮助!
【讨论】: