Canvas homework#138
Conversation
| import kotlin.math.min | ||
| import kotlin.math.sqrt | ||
|
|
||
| class PieChart @JvmOverloads constructor( |
There was a problem hiding this comment.
не реализован механизм сохранения состояния, нужно сделать onSaveInstanceState и onRestoreInstanceState
| setMeasuredDimension(wSize, pieHeight.toInt()) | ||
| } | ||
| } | ||
| super.onMeasure(widthMeasureSpec, heightMeasureSpec) |
| val wSize = MeasureSpec.getSize(widthMeasureSpec) | ||
| val hSize = MeasureSpec.getSize(heightMeasureSpec) | ||
|
|
||
| when (wMode) { |
There was a problem hiding this comment.
не нужно вызывать setMeasuredDimension отдельно для высоты и ширины, плюс можно все упростить через resolveSize, примерно так:
val measuredWidth = resolveSize(desiredWidth, widthMeasureSpec)
val measuredHeight = resolveSize(desiredHeight, heightMeasureSpec)
val size = min(measuredWidth, measuredHeight)
setMeasuredDimension(size, size)
desiredWidth и desiredHeight желаемые размеры
| private val jsonMapper: JsonMapper | ||
| ) : ViewModel() { | ||
|
|
||
| val data = jsonMapper.mapJson() |
There was a problem hiding this comment.
тут каждый payload превращается в отдельный сектор, а данные должны агрегироваться по категориям
|
|
||
| canvas.drawArc(rect, startAngle, swipeAngle, true, paint) | ||
|
|
||
| sectors.add( |
There was a problem hiding this comment.
в onDraw нельзя вычислять сектора, это нужно сделать заранее, он вызывается очень часто
@SuppressLint("DrawAllocation") не нужно подавлять, это реальная проблема производительности
| style = Paint.Style.FILL | ||
| } | ||
|
|
||
| val rect = RectF(0f, 0f, pieWith, pieHeight) |
There was a problem hiding this comment.
график всегда 200 на 200 и не подстраивается под размеры вью, нужно реализовать onSizeChanged и в нем определить размеры rect
|
|
||
| val distance = sqrt(dx * dx + dy * dy) | ||
|
|
||
| if (distance > rect.width() / 2f) return false |
There was a problem hiding this comment.
тут лучше возвращать true иначе событие может уйти родителю
|
|
||
| data.forEach {item -> | ||
| paint.color = item.color | ||
| val swipeAngle = (item.amount/total) * 360f |
There was a problem hiding this comment.
тут при нулевом total можем получить деление на 0
No description provided.