Координаты, которые вы должны указать в конструкторе RectF
, относятся к тем, которые вы указали при создании растрового изображения с Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)
.Например, с растровым изображением 100x100 пикселей и установленным таким образом RectF
:
new RectF(5f, 10f, 85f, 75f);
В результате вы получите следующий результат (фон ImageView
синий, чтобы четко видеть его границы):
Как вы можете видеть, пределы RectF
устанавливаются в точечных координатах, начиная по горизонтали слева и вертикально сверху.
Чтобы создать три круговых диаграммы, вы можете просто создать большее растровое изображение (здесь 300x100) и сместить координаты RectF
для каждого нового графика:
private fun drawPieCharts() {
var bitMap = Bitmap.createBitmap(300, 100, Bitmap.Config.ARGB_8888)
bitMap = bitMap.copy(bitMap.config, true)
// Construct a canvas with the specified bitmap to draw into
val canvas = Canvas(bitMap)
drawSinglePie(canvas, 0f)
drawSinglePie(canvas, 100f)
drawSinglePie(canvas, 200f)
imageView.setImageBitmap(bitMap)
}
private fun drawSinglePie(canvas: Canvas, horizontalOffset: Float) {
val oval = RectF(5f + horizontalOffset, 10f, 85f + horizontalOffset, 75f)
paint.style = Paint.Style.FILL
paint.color = Color.GRAY
canvas.drawArc(oval, 0f, 90f, true, paint)
paint.color = Color.GREEN
canvas.drawArc(oval, 90f, 90f, true, paint)
paint.color = Color.RED
canvas.drawArc(oval, 180f, 90f, true, paint)
paint.color = Color.BLACK
canvas.drawArc(oval, 270f, 90f, true, paint)
}
, что приведетк этому результату:
Но растровое изображение может в конечном итоге растягиваться, как на приведенных выше снимках экрана, поэтому лучшим решением будет создание настраиваемого представления дляизбегайте такой пикселизации.