Прежде всего, я приношу свои извинения за свой английский.Вид поверхности и масштабирование
Я новичок в программировании 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, я использовал один и тот же код, и он хорошо масштабируется по высоте, но не в ширине для всех экранов даже планшет.
Это код 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? Я делаю что-то неправильно?
спасибо.
Действительно оценен. FIrst Я не знаю, что вы имеете в виду с помощью surfaceView.getHeight() (я не знаю, нужно ли инициализировать переменную Surface или что), поэтому я использую функцию requestWindosFeature и работает очень хорошо. Огромное спасибо. – Sergio