Ограничьте масштабирование растрового изображения в SurfaceView, Android - PullRequest
0 голосов
/ 29 марта 2011

У меня есть одно растровое изображение в виде поверхности.Я использую мультитач для обработки жестов, таких как масштабирование и перетаскивание, проблема в том, что когда я масштабирую растровое изображение, я не хочу, чтобы его можно было уменьшать настолько, чтобы оно не охватывало весь экран (вид поверхности).Я не нашел способа обойти это, так как я не могу найти способ получить текущую высоту или ширину растрового изображения с уменьшенным масштабом.

Вот мой код:

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);                
        }           
    }   
}

И вотчто происходит в методе spacing (event):

    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) - это просто canvas.drawBitmap (myBitmap, _matrix, null)

Кто-нибудь знает, как я могу решить эту проблему?

Итак, просто чтобы убедиться, что вы правильно поняли мою проблему, подумайте о ней как о большой карте мира, к которой я хочу увеличить масштаб, и, конечно, уменьшить масштаб, когда я уже увеличил масштаб,но НЕ позволяя увеличить масштаб изображения больше, чем при запуске.

1 Ответ

0 голосов
/ 30 марта 2011

Нашел мое решение, возможно, есть лучший способ, но сейчас я использую:

matrix.mapRadius(1);

что я могу сравнить с переменной, инициализированной для этого значения метода в начале.

Редактировать:

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

работает лучше и легче.

...