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); } 

}

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!

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);

  • lona de encargo de la lona del relleno
  • Seleccionar cámara trasera en el dispositivo Android - jsartoolkit5
  • Android dibujar con desenfoque
  • Dibuje la forma transparente sobre lienzo
  • Android dibujo sobre lienzo
  • Texto dinámico en fondo de pantalla en vivo
  • Guardar rutas de lienzo en SharedPreference y volver a dibujar en lienzo cuando se vuelva a abrir la aplicación
  • Coordenadas no correspondientes
  • Android Dibujo de texto con opengl es se bloquea después de unos minutos
  • Dibujar la línea en la pintura de los dedos quitar la imagen dibujada previamente
  • ¿Botón de dibujo de Android a la lona con la opinión de encargo?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.