gpt4 book ai didi

java - Android 中 Paint.StrokeWidth = 1 的 drawLine 问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:10:36 26 4
gpt4 key购买 nike

我想我遇到了一个讨厌的错误。问题是几乎是水平线具有轻微的渐变并使用 StrokeWidth = 1 的 Paint 不是绘制,例如:

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

并以这种方式使用 MyControl 类:

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

将 StrokeWidth 设置为 0 或 > 1,绘制所有线条。

任何人都可以对此有所了解,还是我应该将此问题提交为 Android Issue

提前致谢!

最佳答案

通过将 strokeWidth 设置为 0,您表示 android 以细线宽度(在任何设备上通常为 1px)绘制。如果您将描边宽度设置为 1,则该值将被缩放,即在 ldpi 设备上它将是 0.75 * 1 = 0.75px。所以这条线可能根本不会被渲染。将 ANTI_ALIAS_FLAG 设置为您的绘图设备可能会有所帮助:

Paint pen = new Paint(Paint.ANTI_ALIAS_FLAG);

或者,您可以计算电流密度的笔划宽度:

pen.setStrokeWidth(1 / getResources().getDisplayMetrics().density);

关于java - Android 中 Paint.StrokeWidth = 1 的 drawLine 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5377052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com