Я хочу рисовать круг в центре экрана, но я получаю что-то вроде этого:
Я использую этот код для рисования этого круга.
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); int height = display.getHeight(); Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_4444); Canvas c = new Canvas(bmp); RectF rect = new RectF(0,0,width,width); drawCircle(rect, c, width, height); ImageView img = (ImageView) findViewById(R.id.imageView1); img.setImageBitmap(bmp); img.setScaleType(ScaleType.FIT_CENTER); } private void drawCircle(RectF rect, Canvas c, int width, int height) { Paint paint = new Paint(); paint.setARGB(255, 255 , 10, 21); paint.setStrokeWidth(10); paint.setAntiAlias(true); paint.setStrokeCap(Paint.Cap.BUTT); paint.setStyle(Paint.Style.STROKE); int radius; if(width < height) radius = width/2; else radius = height/2; c.drawCircle(width/2, height/2, radius, paint); }
Я не понимаю, почему он обрезается по сторонам, хотя я использую размер экрана, чтобы рисовать его, поэтому он должен идеально соответствовать ему.
Вы не учитывали толщину линии (strokeWidth). Вы нарисовали круг, предположив, что он имеет толщину 0, поэтому «фактический» круг IS касается краев экрана, но поскольку вы использовали толстую кисть, часть краски просочилась мимо края.
Вы должны уменьшить толщину / 2.
private void drawCircle(RectF rect, Canvas c, int width, int height) { Paint paint = new Paint(); paint.setARGB(255, 255 , 10, 21); paint.setStrokeWidth(10); paint.setAntiAlias(true); paint.setStrokeCap(Paint.Cap.BUTT); paint.setStyle(Paint.Style.STROKE); int radius; if(width < height) radius = width/2; else radius = height/2; //this is the new line: radius-= 5; c.drawCircle(width/2, height/2, radius, paint); }
Учет для StrokeWidth
в радиусе:
// Substract stroke width. radius -= paint.getStrokeWidth() / 2; c.drawCircle(width/2, height/2, radius, paint);