问题描述
我需要你的帮助
所以我通过扩展 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
}
}
问题: 现在我想通过扩展 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 (将#修改为@)