автоматическое масштабирование холста по размеру растрового изображения - PullRequest
3 голосов
/ 21 ноября 2011

В моих пользовательских видах OnDraw метод я рисую Bitmap к центру Canvas с

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    Rect r = canvas.getClipBounds();
    displayWidth = r.right;
    displayHeight = r.bottom;
    camera.applyToCanvas(canvas);
    float zW = (float)bitmapWidth / (float)displayWidth;
    float zH = (float)bitmapHeight / (float)displayHeight;
    float z = 0.0f;
    if (zW>1 || zH>1) {
        z = Math.max(zW, zH); 
    }
    canvas.drawColor(Color.DKGRAY);
    canvas.drawBitmap(bitmap, (displayWidth/2.0f - (bitmapWidth)/2.0f), (displayHeight/2.0f - bitmapHeight/2.0f), paint);
    if (z>0) {
        camera.translate(z, -z, z);
    }
}

Если Bitmap больше по высоте или ширина больше, чем *Размер 1008 * (displayWidth, displayHeight), как я могу использовать класс Camera для автоматического увеличения, чтобы соответствовать Bitmap и центрировать его по Canvas.Есть идеи?

1 Ответ

0 голосов
/ 29 ноября 2011

Попробуйте создать экземпляр Matrix и инициализировать его, используя

public boolean setRectToRect (RectF src, RectF dst, Matrix.ScaleToFit stf)

Вам нужно сделать это только один раз и сохранить матрицу в памяти.Обратите внимание, что Matrix.ScaleToFit определяет значение CENTER.

Позже, когда вы рисуете растровое изображение, используйте эту версию drawBitmap:

public void drawBitmap (Bitmap bitmap, Matrix matrix, Paint paint)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...