【发布时间】:2016-06-16 01:44:50
【问题描述】:
现在我在 android studio 中使用此代码作为自定义布局。但最大的问题是,当捏合缩放时,它会放大到 0,0 点,而不是放大到手指点。
【问题讨论】:
现在我在 android studio 中使用此代码作为自定义布局。但最大的问题是,当捏合缩放时,它会放大到 0,0 点,而不是放大到手指点。
【问题讨论】:
编辑:分叉原始要点并更新它,view it here。它比我想象的要复杂一些。缩放视图的默认轴心点是视图的中心。为了完成这项工作,我必须将视图枢轴设置为 (0,0),并根据用户的手势调整枢轴的平移。
我注意到在您的onScale() 覆盖中您正在调用scaleDetector.getScaleFactor(),但您没有调用scaleDetector.getFocusX() 和scaleDetector.getFocusy()。这些方法告诉您捏缩放的焦点是什么。您必须调用这些方法并获取此焦点 (x,y),然后进行一些计算以找出保持该焦点所需的平移。您必须将其添加到您的 dx 和 dy 值中,以便翻译成为焦点。
要计算平移,您需要获取焦点并将 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)
显然,您会将这些值添加到您的 dx 和 dy 值中以进行翻译。
【讨论】: