Dimensiones de pantalla que se calculan incorrectamente

Recientemente he estado tratando de implementar mi primer juego con Android utilizando un enfoque similar al LunarLander infame. Estoy haciendo los gráficos sin la ayuda de un motor de juego, y que parece ser la parte más complicada de la empresa hasta el momento.

El problema

Estoy determinando el ancho de la pantalla, y enviando esa información en un algoritmo que determina el número máximo de imágenes que se pueden renderizar horizontalmente dado el ancho y algunos otros valores de margen (vea calculateMaxBeadsInWidth() abajo). Sin embargo, las matemáticas parecen no coincidir con los valores calculados por el algoritmo. Básicamente, es determinante que sólo X cantidad de imágenes se puede mostrar, cuando en realidad X + 2 imágenes pueden ser fácilmente visualizadas en la pantalla.

Los Cálculos

He analizado muchas salidas de depuración que muestran que el ancho real de la pantalla es de 800 pixels , y el ancho de la imagen es de 44 pixels . Por lo tanto, dado que el margen es de 100 pixels ( 50 pixels en el extremo izquierdo y 50 pixels en el extremo derecho), que deja 700 pixels para trabajar. Ahora, el floor(700 / 44) = 15 , por lo que sólo se muestran 15 imágenes. Pero hay claramente espacio para más (ver fotos)!

El código

Mi algoritmo:

 private int calculateMaxBeadsInWidth() { float eff_width = screenWidth - (BOARD_MARGIN_HORIZONTAL * 2); return (int) (eff_width / bead_width); } 

Tenga en cuenta que el valor de BOARD_MARGIN_HORIZONTAL es 50.0f .

Algunas fotos

Esto es lo que está produciendo mi algoritmo:

Introduzca aquí la descripción de la imagen

Sin embargo, como se puede ver, es obvio que fácilmente podría encajar al menos 2 bolas más hacia el final de las líneas (a la derecha). Por ejemplo, esta imagen muestra lo que sucede cuando código duro el número de cuentas en una fila a dos más que el algoritmo está produciendo:

Introduzca aquí la descripción de la imagen

Aquí está la imagen con los márgenes detallados con líneas rojas. Como se puede ver todavía hay mucho espacio:

Introduzca aquí la descripción de la imagen

Información suplementaria

Estoy probando esta aplicación en Google Nexus 7.

Estoy utilizando getResources().getDisplayMetrics().widthPixels; Para obtener el ancho de la pantalla. Tal vez el problema es aquí?

Mi pregunta

¿Hay algunos valores de resolución que no estoy tomando en consideración aquí que están afectando los resultados? ¿Por qué se calcula esto de manera tan inexacta?

¡Si usted necesita más información que alegremente la proporcionará, cualquier ayuda sería apreciada grandemente!

Sus márgenes son el valor equivocado. Has subido imágenes de tamaño completo, pero si dibujas líneas verticales @ 50px y 750px, intersecan el área de dibujo. Por lo tanto, usted está utilizando el valor equivocado en sus cálculos, o en otro lugar que está dibujando en lo que se supone que es el margen.

Introduzca aquí la descripción de la imagen

  • Cambiar tamaño de Android personalizado SurfaceView
  • Ocultar una vista de superficie que se superpone a otra
  • Android: problema SurfaceView (anchura, altura)
  • Cámara Android: la vista previa se amplía al grabar vídeo
  • ¿Cómo tomar una captura de pantalla de la vista de superficie de Android?
  • Fragmentos - El niño especificado ya tiene un padre. Debe llamar a removeView () en el padre del niño primero
  • Dibujar SurfaceView desde el diseño xml
  • ¿Por qué el bucle de mi SurfaceView no funciona con un FPS decente?
  • Crash con SurfaceView en Android NDK al pausar / reanudar la aplicación rápidamente
  • Reinicio / Pausa del hilo en onResume / onPause
  • Android Multiple SurfaceViews
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.