Как масштабировать растровые изображения на View.Canvas в Android? - PullRequest
3 голосов
/ 05 февраля 2012

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

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

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

Ответы [ 2 ]

6 голосов
/ 05 февраля 2012

Существует много форм метода 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);
0 голосов
/ 05 февраля 2012

Canvas.scale() добивается цели.

...