也许以下代码将帮助您计算手势中心和缩放因子的坐标.我在代表opengl-sprite的类中使用此方法.
void zoom(float scale, PointF midPoint) {
if (zoomFactor == MAX_ZOOM_FACTOR && scale > 1) return;
if (zoomFactor == MIN_ZOOM_FACTOR && scale < 1) return;
zoomFactor *= scale;
x = (x - midPoint.x) * scale + midPoint.x;
y = (y - height + midPoint.y) * scale + height - midPoint.y;
if (zoomFactor >= MAX_ZOOM_FACTOR) {
zoomFactor = MAX_ZOOM_FACTOR;
} else if (zoomFactor < MIN_ZOOM_FACTOR) {
zoomFactor = MIN_ZOOM_FACTOR;
x = 0;
y = 0;
}
}
由于opengl坐标系(右和上)和midPoint坐标系(右和下)的方向之间的区别,X和Y坐标以不同的方式处理. midPoint取自MotionEvents坐标.
我认为所有其他操作都是可以理解的.
希望它会对你有所帮助.