Pregunta

Estoy trabajando con la versión 1.6 del código de escáner de código de barras Zxing.

Aunque la versión de esta aplicación del mercado de Android (3.53) funciona bien en mi increíble, el Viewfinderview se ve mal cuando la compilo yo mismo (3.5beta).

He descubierto que el tamaño de lienzo predeterminado del ViewFinderview (que llena toda la pantalla) es 533x320, mientras que las dimensiones de pantalla reales son 800x480.

Entonces, en el método OnDraw, el ViewFinderview asume coordenadas de pantalla para el rectángulo del visor, pero aplicándolos en las coordenadas de lienzo de OnDraw. Esto da como resultado que el visor sea dibujado demasiado y demasiado grande en las dimensiones X e Y.

Entonces, ¿qué determina las dimensiones reales del lienzo que obtiene su vista? En mi caso, el lienzo se reduce en un tercio en comparación con las coordenadas de pantalla. No puedo encontrar ninguna diferencia en el código que pueda afectar esto entre las versiones 3.5beta y 3.53.

¿Fue útil?

Solución

Creo que la aplicación no declara soporte para pantallas con una densidad variable. Hay una etiqueta llamada <supports-screens> en androidmanifest.xml y tiene un parámetro anyDensity. Si se establece en true, se supone que la aplicación puede manejar pantallas con diferentes densidades, si se establece en false, Android escala la pantalla en sí para que la aplicación pueda dibujar a la pantalla de un tamaño diferente al real dependiendo de la densidad de la pantalla.

Por defecto, este parámetro se establece en true Si la aplicación se dirige al nivel API de 4 y más y a false de lo contrario. Esto se hace porque antes de que las aplicaciones Android 1.6 se hicieran para un tamaño y densidad de pantalla fija, y comenzando con Android 1.6 esto cambió, por lo que la compabilidad hacia atrás tuvo que mantenerse.

En su caso, la pantalla tiene alta densidad, que corresponde a un coeficiente de 1.5. Entonces, si dibuja a una pantalla con la altura de 800 PX, esto se considera lo mismo que dibujar en la pantalla de 533 PX con densidad normal.

Si quieres el Canvas tener el tamaño "real", anyDensity tiene que estar configurado para true o al menos minSdkVersion a 4 y más.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top