2015-01-29 2 views
0

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

Я новичок в программировании 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); 
} 

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

enter image description here (Не беспокойтесь о характере)

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

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

enter image description here

Это код GUI

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(), чтобы сделать вашу игру в полноэкранном режиме.

+0

Действительно оценен. FIrst Я не знаю, что вы имеете в виду с помощью surfaceView.getHeight() (я не знаю, нужно ли инициализировать переменную Surface или что), поэтому я использую функцию requestWindosFeature и работает очень хорошо. Огромное спасибо. – Sergio

Смежные вопросы