DrawLine problema con Paint.StrokeWidth = 1 en Android
Creo que he golpeado un desagradable error. El problema es que las líneas casi horizontales con un ligero gradiente y con una pintura con StrokeWidth = 1 no se trazan, por ejemplo:
public class MyControl extends View { public MyControl(Context context) { super(context); // TODO Auto-generated constructor stub } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint pen = new Paint(); pen.setColor(Color.RED); pen.setStrokeWidth(1); pen.setStyle(Paint.Style.STROKE); canvas.drawLine(100, 100, 200, 90, pen); //not painted canvas.drawLine(100, 100, 200, 100, pen); canvas.drawLine(100, 100, 200, 110, pen); //not painted canvas.drawLine(100, 100, 200, 120, pen); //not painted canvas.drawLine(100, 100, 200, 130, pen); pen.Color = Color.MAGENTA; pen.setStrokeWidth(2); canvas.drawLine(100, 200, 200, 190, pen); canvas.drawLine(100, 200, 200, 200, pen); canvas.drawLine(100, 200, 200, 210, pen); canvas.drawLine(100, 200, 200, 220, pen); canvas.drawLine(100, 200, 200, 230, pen); }
}
- Android: ¿Desplazando eficientemente el contenido de una lona?
- Tratando de crear una pintura de borrador para lienzo
- ¿Cómo encontrar la posición actual del traductor en Canvas?
- El botón flotante de Android no se muestra
- Cómo saber el tamaño de un texto al usar Canvas.drawText ()
Y utilizando la clase MyControl de esta manera:
public class prova extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyControl ctrl = new MyControl(this); setContentView(ctrl); }
}
Si se establece StrokeWidth en 0 o> 1, se trazan todas las líneas.
¿Puede alguien aportar alguna luz sobre esto o debo enviar este problema como un problema de Android ?
¡Gracias por adelantado!
- Grabe los bordes de una forma de imagen que muestra la profundidad en android
- Cambiar el color en Paint and Canvas en Android
- Lienzo de recorte rect - derecho / inferior incluido?
- Rendimiento en tiempo real de la galería de lienzo de Android
- Lienzo dirección drawtext
- Android - drawline con aceleración de hardware y antialiasing causa artefactos
- Android: Lienzo vs OpenGL
- Cómo dibujar el juego en Android Canvas con un montón de primitivos
Al establecer strokeWidth a 0 dices android para dibujar con un ancho de la línea del pelo (que suele ser un 1px en cualquier dispositivo). Si se establece el ancho de trazo en 1, el valor es escalado, es decir, en los dispositivos ldpi sería 0.75 * 1 = 0.75px. Así que la línea podría no ser renderizada en absoluto. Ajustar ANTI_ALIAS_FLAG a su dispositivo de pintura podría ayudar:
Paint pen = new Paint(Paint.ANTI_ALIAS_FLAG);
Alternativamente, puede calcular el ancho de trazo para la densidad de corriente:
pen.setStrokeWidth(1 / getResources().getDisplayMetrics().density);
Utilice Paint pen = new Paint(Paint.ANTI_ALIAS_FLAG);