限制SurfaceView,Android中的位图缩放

时间:2011-03-29 01:15:23

标签: android matrix bitmap scale

我在surfaceview中有一个Bitmap。 我正在使用多点触控来处理缩放和拖动等手势,问题是当我缩放位图时,我不希望它能够缩小那么多,它不会覆盖整个显示器(表面视图)。我找不到解决这个问题的方法,因为我无法找到一种方法来获得当前缩小的位图当前高度或宽度。

以下是我的一些代码:

private void multiTouchBehavior(MotionEvent event)
{
    if(event.getAction() == MotionEvent.ACTION_POINTER_2_DOWN)
    {
        _oldDist = spacing(event);
        if(_oldDist > 10f) // just be secure of a bug in the API
        {
            _saved.set(_matrix);
            _mid = midPoint(event);
        }
    }
    else if(event.getAction() == MotionEvent.ACTION_MOVE)
    {
        _newDist = spacing(event);
        if(_newDist > 10f)
        {
             _matrix.set(_saved);
             float scale = _newDist / _oldDist;

             _matrix.postScale(scale, scale, _mid.x, _mid.y);                
        }           
    }   
}

以下是方法间距(事件)中发生的事情:

    private float spacing(MotionEvent event) {
       float x = event.getX(0) - event.getX(1);
       float y = event.getY(0) - event.getY(1);
       return FloatMath.sqrt(x * x + y * y);
    }

我的onDraw(画布)只是canvas.drawBitmap(myBitmap,_matrix,null)

任何人都知道如何解决这个问题?

所以只是为了确保你能解决我的问题,把它想象成我想要放大的世界大地图,当然,当你已经放大时,可以放大,但不允许它要比开始时更多地缩放。

1 个答案:

答案 0 :(得分:0)

找到我的解决方案,可能有更好的方法,但现在我使用:

matrix.mapRadius(1);

我可以比较初始化为beggining中该方法值的变量。

编辑:

float[] f = new float[9];
matrix.getValues(f);
float xScale = f[0];
float yScale = f[3];

效果更好,更容易。