Круг, нарисованный на холсте, не соответствует экрану

Я хочу рисовать круг в центре экрана, но я получаю что-то вроде этого:

Введите описание изображения здесь

Я использую этот код для рисования этого круга.

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); 
Intereting Posts
Убедитесь, что имя класса существует, является общедоступным и имеет пустой конструктор для общедоступного фрагмента с именем класса и пустым конструктором Как создать XWalkView в сервисе? Что означает «Sync Project with Gradle File»? Дублированный идентификатор с фрагментом В чем разница между имитацией системы Intel x86 Atom и API Google (образ системы x86) Gradle-android-scala-plugin дает ошибку «Не удалось найти соответствующий конструктор» Создание глобальных функций в android Лучший планшет Android для разработки Как мне создать новую активность, где у меня будет возможность добавлять новые элементы из базы данных? Эмулятор не возвращает фактическую ширину и высоту для разрешения 320×240 HttpURLConnection не работает на Android 4.0 Android genymotion vs emulator Просмотр содержимого еще не создан Как создать сенсорный симулятор для Android? Установка Android apk программно как часть тестовой среды