Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android中Paint.StrokeWidth=1的绘图线问题_Java_Android_Canvas - Fatal编程技术网

Java Android中Paint.StrokeWidth=1的绘图线问题

Java Android中Paint.StrokeWidth=1的绘图线问题,java,android,canvas,Java,Android,Canvas,我想我碰到了一只讨厌的虫子。问题是几乎是水平线 具有轻微的渐变和使用StrokeWidth=1的油漆不适用 例如: public class MyControl extends View { public MyControl(Context context) { super(context); // TODO Auto-generated constructor stub } @Override protected void

我想我碰到了一只讨厌的虫子。问题是几乎是水平线 具有轻微的渐变和使用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);
   }
}

以这种方式使用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将打印所有线

有没有人能解释一下这个问题,或者我应该把这个问题作为一个问题来提交

提前谢谢

使用
油漆笔=新油漆(油漆.防油漆别名标志)

通过将strokeWidth设置为0,您可以说android使用发际线宽度(在任何设备上通常为1px)进行绘制。如果将笔划宽度设置为1,则该值将缩放,即在ldpi设备上,该值将为0.75*1=0.75px。因此,可能根本不会渲染线条。为绘制设备设置ANTI_ALIAS_标志可能会有所帮助:

Paint pen = new Paint(Paint.ANTI_ALIAS_FLAG);
或者,您可以计算电流密度的笔划宽度:

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