Поверхностный вид и масштабирование

Прежде всего, я прошу прощения за мой английский.

Я новичок в программировании приложения для Android, и недавно я обнаружил Canvas и Bitmap, поэтому я решил создать "Игру", которая может использовать только ландшафт. Я также обнаружил SurfaceView и как реализовать фон в моем SurfaceView, но в первую очередь это то, что мой фон - это изображение 496x288.

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

@SuppressLint("WrongCall")
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            // TODO Auto-generated method stub
            Bitmap background = BitmapFactory.decodeResource(getResources(), R.drawable.fondo1escalado);
            float scale = (float) background.getHeight() / (float) getHeight();
            int newWidth = Math.round((background.getWidth() / scale));
            int newHeight = Math.round(background.getHeight() / scale);
            scaled = Bitmap.createScaledBitmap(background, newWidth, newHeight, true);
            gameLoopThread.setRunning(true);
            gameLoopThread.start();


}

@SuppressLint("WrongCall")
protected void onDraw(Canvas canvas) {

    canvas.drawColor(Color.BLUE);
    canvas.drawBitmap(scaled, 0,0, null);
}

Это работает, но это не работает хорошо. Я получил это:

(Не беспокойся о персонаже)

Он хорошо масштабируется, но не умещается на весь экран (см. Синий фон).

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

Это код графического интерфейса

float scalaInterfazAltura = (float) interfaz.getHeight() / (float) getHeight();
        int newHeightInterfaz = Math.round(interfaz.getHeight() / scalaInterfazAltura);
        int newWidthInterfaz = Math.round(interfaz.getWidth() / scalaInterfazAltura);
        scaledinterfaz = Bitmap.createScaledBitmap(interfaz, newWidthInterfaz, newHeightInterfaz, true);
        canvas.drawBitmap(scaledinterfaz, getWidth() - interfaz.getWidth()/2, 0, null);

Итак, мой вопрос: есть что-то, что хорошо масштабируется в Surfaceview? Я что то не так делаю?

Спасибо.

1 ответ

Решение

Это происходит потому, что высота вашего дисплея больше, чем высота просмотра. Попробуй использовать surfaceView.getHeight() вместо interfaz.getHeight(),

Также Вы можете использовать

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

в вашей деятельности до setContentView() сделать вашу игру полноэкранной.

Другие вопросы по тегам