【发布时间】:2016-07-22 09:22:43
【问题描述】:
我正在使用此代码围绕焦点缩放我的画布
private class MyScaleDetector
extends ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScaleBegin(ScaleGestureDetector detector) {
float focusx=detector.getFocusX();
float focusy=detector.getFocusY();
return super.onScaleBegin(detector);
}
@Override
public boolean onScale(ScaleGestureDetector detector) {
float factor=detector.getScaleFactor();
scale *= factor;
scale = Math.max(0.4f, Math.min(scale, 20.0f));
return true;
}
}
这是我用来在 ondraw 方法中缩放的代码
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.scale(scale,scale,focusx,focusy);
}
我的问题是,例如,当我开始围绕焦点 (200,200) 进行缩放时,起初它开始到那里,但在增加比例时它开始远离该点。所以我的问题是我如何向特定点缩放,以便在缩放时该点成为视口的中心。
我认为我应该使用 canvas.translate() 但我不知道在缩放时我应该移动画布的 x 和 y 位置。
编辑:下图总结了我想说的话
【问题讨论】:
标签: java android math canvas coordinate-transformation