通过扩展视图创建“ImageView”时出现问题

问题描述

我需要你的帮助

所以我通过扩展 AppCompatimageView 创建了一个简单的自定义视图。单击它时它应该改变它的颜色。没有问题,它可以正常工作。

代码如下:

 class MyImageView(context: Context) :androidx.appcompat.widget.AppCompatimageView(context){
        
        private val CHECKED_STATE_SET = intArrayOf(android.R.attr.state_checked)
        private val disABLED_STATE_SET = intArrayOf(-android.R.attr.state_enabled)
        
        init {
            isEnabled=true
            isClickable=true
            scaleType=ScaleType.CENTER
            setBackgroundResource(com.google.android.material.R.drawable.design_bottom_navigation_item_background)
            setonClickListener {
                isSelected = !isSelected
            }
        }

        override fun setimageDrawable(drawable: Drawable?) {
            val drawableState = drawable?.constantState
            val wrapDrawable = DrawableCompat.wrap(drawableState?.newDrawable() ?: drawable!!).mutate()
            DrawableCompat.setTintList(wrapDrawable,ColorStateList(
                    arrayOf(disABLED_STATE_SET,CHECKED_STATE_SET,EMPTY_STATE_SET),intArrayOf(Color.BLACK,Color.RED,Color.GREEN))
            )
            super.setimageDrawable(wrapDrawable)
        }

        override fun onCreateDrawableState(extraSpace: Int): IntArray? {
            val drawableState = super.onCreateDrawableState(extraSpace + 1)
            if (isSelected)
                mergeDrawableStates(drawableState,CHECKED_STATE_SET)
            return drawableState
        }
    }

Image

问题: 现在我想通过扩展 View 来创建我自己的“ImageView”。它也应该在点击时改变它的颜色,但它不起作用。

代码如下:

class MyImageView2(context: Context): View(context){

        private val CHECKED_STATE_SET = intArrayOf(android.R.attr.state_checked)
        private val disABLED_STATE_SET = intArrayOf(-android.R.attr.state_enabled)

        private lateinit var wrapDrawable: Drawable
        private var dWidth=0
        private var dHeight=0
        private val drawMatrix=Matrix()

        init {
            isEnabled=true
            isClickable=true
            setBackgroundResource(com.google.android.material.R.drawable.design_bottom_navigation_item_background)
            setonClickListener {
                isSelected = !isSelected
            }
        }

        fun setimageDrawable(drawable: Drawable) {
            val drawableState = drawable.constantState
            val wrapDrawable = DrawableCompat.wrap(drawableState?.newDrawable() ?: drawable).mutate()
            this.wrapDrawable = wrapDrawable
            DrawableCompat.setTintList(wrapDrawable,Color.GREEN))
            )
            dWidth = wrapDrawable.intrinsicWidth
            dHeight = wrapDrawable.intrinsicHeight
            if (wrapDrawable.isstateful)
                wrapDrawable.state = getDrawableState()
            wrapDrawable.callback = this
            wrapDrawable.layoutDirection = layoutDirection
            wrapDrawable.level = 0
            wrapDrawable.setBounds(0,dWidth,dHeight)
            invalidate()
        }

        override fun onDraw(canvas: Canvas) {
            val count=canvas.save()
            drawMatrix.setTranslate(((width - dWidth) * 0.5f).roundToInt().toFloat(),((height - dHeight) * 0.5f).roundToInt().toFloat())
            canvas.concat(drawMatrix)
            wrapDrawable.draw(canvas)
            canvas.restoretoCount(count)
        }

        override fun onCreateDrawableState(extraSpace: Int): IntArray? {
            val drawableState = super.onCreateDrawableState(extraSpace + 1)
            if (isSelected)
                mergeDrawableStates(drawableState,CHECKED_STATE_SET)
            return drawableState
        }
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)