7

我有一个画布,我正在使用 ScaleGestureDetector 来放大我的 android 应用程序。这是我到目前为止的代码:

        //SCALING --------------------------------------------------
        //get center of the viewport
        int centerX = xLoc+((int)(screenWidth/2*scaleFactor));
        int centerY = yLoc+((int)(screenHeight/2*scaleFactor));
        scaleFactor /= detector.getScaleFactor();

        // Don't let the object get too small or too large.
        scaleFactor = Math.max(1.0f, Math.min(scaleFactor, maxScaleFactor));                
        //Make sure the viewport is repositioned
        xLoc = centerX-((int)(screenWidth/2*scaleFactor));
        yLoc = centerY-((int)(screenHeight/2*scaleFactor));
            //-----------------------------------------------------------

这非常适合放大和缩小我的画布。xLoc 和 yLoc 代表我的视口的左上角,相对于我正在绘制一部分的整个图像。不过,我对这段代码的问题是它放大到视口的中心。我希望能够使用detector.getFocuxX() 和detector.getFocusY() 来放大焦点,就像在android 浏览器中进行缩放一样。

基本上我需要调整视口的位置(xLoc 和 yLoc),以便它看起来像缩放到缩放手势的焦点。

我无法弄清楚这部分。如果有人知道如何在不使用画布矩阵转换的情况下做到这一点(我在发布此之前发现的许多主题中都使用过它),我将不胜感激!即使您可以将我指向其他做过类似事情的人。

4

1 回答 1

0

单个onScale函数调用不能提供足够的信息来实现围绕明显焦点的缩放。您将需要保留上一次调用的值getFocusX()getFocusY()来自上一次onScale调用的值,并使用它们来影响您在下一次调用中的缩放。

于 2015-02-09T08:56:56.013 回答