Я пытаюсь программно сгенерировать некоторые drawables для приложения. Drawables представляют приращения половин таблетки и генерируются следующим образом:
private fun createPillFullDosage(context: Activity, dosage: Int) : Drawable {
val pill = GradientDrawable()
pill.shape = GradientDrawable.OVAL
pill.setSize(40, 40)
pill.setStroke(1, Color.TRANSPARENT)
pill.setColor(when (dosage){
1 -> ContextCompat.getColor(context, R.color.colorPrimary25)
2 -> ContextCompat.getColor(context, R.color.colorPrimary50)
3 -> ContextCompat.getColor(context, R.color.colorPrimary75)
else -> Color.TRANSPARENT
})
return pill
}
private fun createPillHalfDosage(context: Activity, dosage: Int) : Drawable {
val pill = GradientDrawable()
pill.shape = GradientDrawable.RECTANGLE
pill.setSize(20, 40)
pill.cornerRadii = floatArrayOf(20.0f, 20.0f, 0.0f, 0.0f,
0.0f, 0.0f, 20.0f*scale, 20.0f*scale)
pill.setStroke(1, Color.TRANSPARENT)
pill.setColor(when (dosage){
1 -> ContextCompat.getColor(context, R.color.colorPrimary50)
else -> Color.TRANSPARENT
})
return pill
}
private fun generatePill(context: Activity, dosage: Int, color: String): Drawable? {
val dFull = dosage / 2
val dHalf = dosage % 2
val pillFull = createPillFullDosage(context, dFull)
val pillHalf = createPillHalfDosage(context, dHalf)
val layers = arrayOf(pillFull, pillHalf)
val layerDrawable = LayerDrawable(layers)
layerDrawable.setLayerGravity(0, Gravity.CENTER)
layerDrawable.setLayerGravity(1, Gravity.CENTER)
layerDrawable.setLayerInsetRight(1, 20)
return layerDrawable
}
fun getPillSelector(context: Activity, dosage: Int): Drawable {
val drawable = StateListDrawable()
drawable.setExitFadeDuration(1000)
drawable.addState(
IntArray(android.R.attr.state_checked),
generateSintromPill(context, dosage)
)
// Here goes some more states
return drawable
}
Затем в основном упражнении я генерирую список drawables для всех случаев,
val drawables = List<Drawable>(5){i -> getPillSelector(requireActivity(), i+1)}
Если Я пытаюсь создать 6 вместо 5, я получаю OOM, и приложение вылетает. Что я должен делать по-другому? Мне действительно нужно создать (если бы это было так) 12 drawables в xml?
Спасибо