【问题标题】:How to pinch zoom within finger point?如何在手指点内捏缩放?
【发布时间】:2016-06-16 01:44:50
【问题描述】:

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

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

【问题讨论】:

    标签: android android-gesture


    【解决方案1】:

    编辑:分叉原始要点并更新它,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 值中以进行翻译。

    【讨论】:

    • 不要真正明白你的意思。你能举个更详细的例子吗?因为我是新来的,所以我不明白你在说什么。谢谢
    • @KrisLarson:双击时重置布局怎么样?
    • @abcd1234 请为此发布一个新问题
    • @KrisLarson 你能帮我解决这个问题吗:stackoverflow.com/questions/37856089/…
    • @KrisLarson:你能帮我解决这个问题吗stackoverflow.com/questions/37903531/…>
    猜你喜欢
    • 2018-12-02
    • 2019-11-25
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2011-12-27
    • 1970-01-01
    • 2019-08-21
    相关资源
    最近更新 更多