drawLine problème avec de la Peinture.StrokeWidth = 1 dans Android
Je pense que j'ai frappé un méchant bug. Le problème, c'est que près de lignes horizontales
avec un léger dégradé et à l'aide d'une Peinture avec StrokeWidth = 1 ne sont pas
tracées, par exemple:
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);
}
}
Et à l'aide de MyControl classe de cette façon:
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);
}
}
Réglage StrokeWidth à 0 ou > 1, toutes les lignes sont tracées.
Quelqu'un peut-il apporter un peu de lumière sur ce ou devrais-je soumettre cette question comme une Android Question?
Merci d'avance!
OriginalL'auteur Narcís Calvet | 2011-03-21
Vous devez vous connecter pour publier un commentaire.
Par la mise en strokeWidth à 0 vous dire android pour dessiner avec un délié de la largeur (ce qui est généralement un 1px sur n'importe quel appareil). Si vous définissez la largeur de trait de 1 la valeur est ensuite mis à l'échelle, c'est à dire sur ldpi appareils, il serait de 0,75 * 1 = 0.75 px. De sorte que la ligne peut-être pas rendu à tous. Réglage ANTI_ALIAS_FLAG à votre peinture de l'appareil qui pourraient vous aider:
Sinon, vous pouvez calculer la largeur du contour de la densité de courant:
OriginalL'auteur Konstantin Burov
Utilisation
Paint pen = new Paint(Paint.ANTI_ALIAS_FLAG);
OriginalL'auteur Lumis