Установите большое изображение в качестве фона SurfaceView, чтобы оно соответствовало высоте экрана в Android - PullRequest
1 голос
/ 05 февраля 2012

Я использую SurfaceView в Android. Приложение всегда в ландшафтном режиме.

В моей папке res / drawable у меня большой фон, который также находится в альбомном режиме, но больше, чем у большинства размеров экрана.

enter image description here

Теперь я хотел бы установить его в качестве фона SurfaceView, чтобы он идеально вписывался в дисплей. Таким образом, высота изображения должна быть равна высоте дисплея.

enter image description here

Как мне это сделать? Нужно ли использовать альтернативные ресурсы для ldpi, mdpi, hdpi и xhdpi? Но даже тогда я не знаю точную высоту дисплея.

Я сейчас использую:

canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.background), 0, 0, null);

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

(Конечно, решение тоже должно быть продуктивным.)

1 Ответ

2 голосов
/ 07 февраля 2012
protected Bitmap scaled = null;

public void surfaceCreated(SurfaceHolder arg0) {
    Bitmap background = BitmapFactory.decodeResource(getResources(), R.drawable.background);
    float scale = (float)background.getHeight()/(float)getHeight();
    int newWidth = Math.round(background.getWidth()/scale);
    int newHeight = Math.round(background.getHeight()/scale);
    Bitmap scaled = Bitmap.createScaledBitmap(background, newWidth, newHeight, true);
}

public void onDraw(Canvas canvas) {
    canvas.drawBitmap(scaled, 0, 0, null); // draw the background
}
...