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