2011-02-05 7 views
9

La clase Android Canvas admite un amplio conjunto de primitivas de dibujo: círculos, líneas, etc. Tengo una aplicación que usa estas para representar algunos datos estadísticos.Proporcionar independencia para las primitivas del dibujo de la clase Canvas

Después de leer la descripción en http://developer.android.com/reference/android/graphics/Canvas.html#drawLine%28float,%20float,%20float,%20float,%20android.graphics.Paint%29 . . . No estaba claro en qué unidades estaban las coordenadas o cómo hacer que el dispositivo/resolución sea independiente.

¿Qué unidades son estas y qué es "mejor práctica" para dibujar líneas y círculos y rectángulos que funcionan en muchos tamaños de pantalla y resoluciones diferentes? Gracias por adelantado.

Respuesta

4

La documentación de Android dice "La unidad de ubicación y dimensiones es el píxel". Después de experimentar durante un tiempo descubrí que antes de la versión 2.0 la unidad era el píxel. Pero a partir de 2.0, la unidad probablemente sea la inmersión (píxel independiente del dispositivo).

Para el siguiente código:

Paint paint = new Paint(); 
paint.setColor(Color.RED); 
paint.setStyle(Paint.Style.STROKE); 
paint.setStrokeWidth(0); 
canvas.drawRect(new Rect(1, 1, 319, 319), paint); 

consigo el mismo cuadrado juego del tamaño de la anchura de la pantalla de 320x480, 480x800, 240x320 y emuladores con 2.0+ androide.

Este descubrimiento me permitió resolver el problema: las líneas verticales de 1 píxel en una pantalla grande a veces tienen 2 píxeles de ancho. Establezca el ancho de trazo en 0 para dibujar líneas de 1 píxel independientemente del tamaño de la pantalla.

Editar

Después de conseguir más experiencia con Android, necesito corregir mis conclusiones. En realidad, hay un atributo "android: anyDensity" en la etiqueta "supports-screens" de AndroidManifest.xml. Este atributo es verdadero por defecto. Cuando es verdad, la unidad de medida es dp; de lo contrario, es un píxel.

Cuestiones relacionadas