Как масштабировать растровые изображения на View.Canvas в Android?

У меня есть класс, производный от View, в котором я рисую растровое изображение размером 790x500 (да, это странно, но должно оставаться таким) прямо на холсте в onDraw. На моем Nexus S это выглядит нормально, но когда я запускаю приложение на устройстве с меньшим экраном (например, Wildfire), я вижу только верхнюю левую часть растрового изображения. Что мне здесь не хватает?

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

В: Как правильно масштабировать растровые изображения для любого разрешения экрана? (Центрирование игрового экрана для больших экранов может быть вариантом, но не обязательно.) Например. когда я рисую изображение 800x600 на экране 320x240, изображение автоматически растягивается, а когда я выводю пиксель с разрешением 100x100, оно становится 40x40.


person l33t    schedule 04.02.2012    source источник


Ответы (2)


Есть много форм метода drawbitmap (). Выберите тот, который позволяет указать исходный и целевой прямоугольники. Исходный прямоугольник будет иметь размер вашего растрового изображения, а целевой прямоугольник будет масштабирован, чтобы поместиться на дисплее устройства. Android масштабирует ваше растровое изображение при его рисовании.

Rect rs = new Rect();
Rect rd = new Rect();
rs.left = rs.top = 0;
rs.right = 789;
rs.bottom = 499;

<calculate destination rectangle from device size>

canvas.drawBitmap(myBitmap, rs, rd, null);

Вы также можете масштабировать и перемещать (сдвигать) весь холст.

canvas.scale(float scaleX, float scaleY);
canvas.translate(float dx, float dy);
person BitBank    schedule 04.02.2012
comment
Что, если я хочу масштабировать ВСЕ растровые изображения и другие операции рисования? - person l33t; 05.02.2012

Canvas.scale() делает свое дело.

person l33t    schedule 05.02.2012