Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何放大以发生多点触摸的焦点为中心的GridLayout视图组?_Android - Fatal编程技术网

Android 如何放大以发生多点触摸的焦点为中心的GridLayout视图组?

Android 如何放大以发生多点触摸的焦点为中心的GridLayout视图组?,android,Android,出于学习目的,我正在尝试编写一个Android应用程序,可以加载任何大小的图片(例如8000x8000px)。为此,我必须将图片预处理为较小的片段,并仅将需要显示的片段加载到GridLayout视图组的单元格中 我能够按照说明进行操作并使此视图滚动(即平移)。现在,我试图将缩放添加到这个GridLayout视图中,但它似乎并不那么简单。基本上,视图保持收缩到(0,0),而不是发生多点触摸的焦点。我需要的缩放行为类似于谷歌地图。然而,我的实现并没有真正起作用。它总是缩放到左上角的坐标轴(0,0),

出于学习目的,我正在尝试编写一个Android应用程序,可以加载任何大小的图片(例如8000x8000px)。为此,我必须将图片预处理为较小的片段,并仅将需要显示的片段加载到GridLayout视图组的单元格中

我能够按照说明进行操作并使此视图滚动(即平移)。现在,我试图将缩放添加到这个GridLayout视图中,但它似乎并不那么简单。基本上,视图保持收缩到(0,0),而不是发生多点触摸的焦点。我需要的缩放行为类似于谷歌地图。然而,我的实现并没有真正起作用。它总是缩放到左上角的坐标轴(0,0),因为对于放大/缩小,只更改大小比例

我的代码看起来像

    private final class onScaleListener implements OnScaleListener {

    @Override
    public void onScale(float scaleFactor, float focusX, float focusY)
    {            
        for (int x = 0; x < GRID_DENSITY; x++)
        {
            Spec columnSpec = GridLayout.spec(x); 
            for (int y = 0; y < GRID_DENSITY; y++)
            {
                Spec rowSpec = GridLayout.spec(y);

                LayoutParams l = new LayoutParams(rowSpec, columnSpec);
                l.height = (int) (_gridHeight * scaleFactor);
                l.width = (int) (_gridWidth * scaleFactor);

                _gridLayout.updateViewLayout(_imageViewMatrix[x][y], l);
            }
        }
    }
}

@Override
public boolean onScale(ScaleGestureDetector arg0)
{
    _scaleFactor *= _scaleGestureDetector.getScaleFactor();

    // Don't let the object get too small or too large.
    _scaleFactor = Math.max(0.1f, Math.min(_scaleFactor, 5.0f));

    _onScaleListener.onScale(_scaleFactor, _scaleGestureDetector.getFocusX(), _scaleGestureDetector.getFocusY());

    return true;
}
onScaleListener上的私有最终类实现onScaleListener{
@凌驾
缩放上的公共无效(浮动缩放因子、浮动焦点X、浮动焦点Y)
{            
对于(int x=0;x
谢谢