Nar*_*vet 5 java android canvas
我想我遇到了一个讨厌的bug.问题是没有绘制具有轻微渐变并且使用Paint with StrokeWidth = 1的近似水平线,例如:
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);
}
Run Code Online (Sandbox Code Playgroud)
}
并以这种方式使用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);
}
Run Code Online (Sandbox Code Playgroud)
}
将StrokeWidth设置为0或> 1将绘制所有行.
任何人都可以对此有所了解,还是应该将此问题作为Android问题提交?
提前致谢!
通过将strokeWidth设置为0,您可以将android绘制为使用细线宽度(在任何设备上通常为1px).如果将笔划宽度设置为1,则会对该值进行缩放,即在ldpi设备上,它将为0.75*1 = 0.75px.所以这条线可能根本没有渲染.将ANTI_ALIAS_FLAG设置为您的绘图设备可能会有所帮助:
Paint pen = new Paint(Paint.ANTI_ALIAS_FLAG);
Run Code Online (Sandbox Code Playgroud)
或者,您可以计算电流密度的笔划宽度:
pen.setStrokeWidth(1 / getResources().getDisplayMetrics().density);
Run Code Online (Sandbox Code Playgroud)