Анимация графических примитивов внутри элементов списка

Есть список(RecyclerView) элементы которого содержат картинки. Картинки содержат движущиеся линии. В адаптере передается номер элемента списка через функцию initData. Но в функции onDraw значение переменной(itemId) принимающей номер элемента списка не меняется, почему?
Этот номер нужен что-бы картинки были разными.
Есть вариант отрисовывать внутри onBindViewHolder, но тогда не понятно как делать анимации и как рисовать не используя Bitmap. Потому, что когда я использовал Bitmap внутри класса CustomView анимации заметно лагали(хотя это были просто две вращающиеся линии).

Фрагмент кода адаптера:

override fun onBindViewHolder(holder: UsersViewHolder, position: Int) {
    val context = holder.itemView.context
    val cv = CustomView(context)
    cv.initData(position) // передача номера элемента списка
}

Фрагмент кода с отрисовкой:

class CustomView : ImageView {
    constructor(context: Context) : super(context) {init()}
    constructor(context: Context, attrst: AttributeSet?) : super(context, attrst) {init()}
    constructor(context: Context, attrs: AttributeSet?, defStyle: Int) : super(context, attrs, defStyle) {init()}

    private var itemId = 0
    private var colCount = 3
    private var imgWidth = (1440/colCount-3.5*4).toFloat()
    private var imgHeight = (90*3.5-3.5*4).toFloat()
    private var angle = 0f

    fun initData(id: Int) {
            itemId = id // прием номера элемента списка
    }

    private fun init() {
        val dm = DisplayMetrics()
        val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
        wm.defaultDisplay.getMetrics(dm)
        val screenWidth = dm.widthPixels
        val dpx = dm.densityDpi.toFloat()/160
        imgWidth = screenWidth/colCount-4*dpx // 4 = padding(2dp) * 2
        imgHeight = 90*dpx-4*dpx
    }

    public override fun onDraw(canvas: Canvas) {
        val paint = Paint()
        paint.strokeWidth = 2f
        canvas.save()
        canvas.rotate(angle,imgWidth/2,imgHeight/2)
        if (itemId==0) {paint.color = Color.RED}
        else {paint.color = Color.YELLOW}
        canvas.drawLine(0f, 0f, imgWidth/2, imgHeight/2, paint)
        paint.color = Color.BLUE
        canvas.drawLine(imgWidth/2, imgHeight/2, imgWidth, imgHeight, paint)
        canvas.restore()
        paint.textSize = 52f
        canvas.drawText("$itemId", 0f, 50f, paint) // почему-то номер элемента не меняется
        angle = (angle + 5) % 360 // для анимации
        postInvalidateDelayed(50); // для анимации
    }
}

Ответы (0 шт):