如何在手指点内捏缩放?

How to pinch zoom within finger point?

现在我正在 android 工作室中使用此代码作为自定义布局。但最大的问题是,捏合缩放时,会放大到0,0点,而不是放大到手指点。

https://gist.github.com/anorth/9845602

编辑:分叉原始要点并更新它,view it here。这比我想象的要复杂一点。缩放视图的默认枢轴点是视图的中心。为了完成这项工作,我必须将视图枢轴设置为 (0,0) 并根据用户的手势调整枢轴的平移。


我注意到在您的 onScale() 覆盖中您正在调用 scaleDetector.getScaleFactor() 但您没有调用 scaleDetector.getFocusX()scaleDetector.getFocusy()。这些方法告诉您双指缩放的焦点是什么。您将必须调用这些方法并获取此焦点 (x,y),然后进行一些计算以找出保持该焦点所需的平移。您必须将其纳入您的 dxdy 值,以便翻译说明焦点。

要计算平移,您需要获取焦点并将 x 和 y 值乘以比例因子的变化。这告诉您在给定焦点 (0,0) 的情况下该点将移动多远。因此,您将从 x(original) 中减去 x(updated) 并从 y(original) 中减去 y(updated) 以获得该移动向量。您的翻译值是否定的向量值。所以:

scale(delta) = scaleDector.getScaleFactor() -- just the change, not the new scale factor
translation x = x(focal) - x(focal) * scale(delta)
translation y = y(focal) - y(focal) * scale(delta)

很明显,您会将这些值添加到 dxdy 值中进行翻译。