如何在手指点内捏缩放?

时间:2016-06-14 03:39:06

标签: android android-gesture

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

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

1 个答案:

答案 0 :(得分:4)

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

我注意到,在scaleDetector.getScaleFactor()覆盖中,您正在呼叫scaleDetector.getFocusX(),但您没有呼叫scaleDetector.getFocusy()dx。这些方法告诉您捏缩放的焦点是什么。您将不得不调用这些方法并获得此焦点(x,y),然后进行一些计算以确定保持该焦点所需的平移。您必须将此工作纳入dyscale(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) 值,以便转换成为焦点。

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

dx

很明显,您会将这些值添加到dyMyCombobox.SelectedValue = myDate.ToString("HH:mm"); 值进行翻译。