一般实现点击效果我们都是使用drawable下的selector来实现,这样UI会给我们两张图,一张normal的,一张press的,我们实现起来很简单。但这样增加了我们编译出来的Apk体积,一张图可以实现的效果,用两张图。UI在做按下效果图的时候其实也是对原图上进行明度,透明度等变化,我们自己程序内部其实就可以对原图在按下的时候进行处理做到。

我们自定义一个ReplaceSelectorImageView 继承自AppCompatImageView
然后我们重写一下里面的点击事件,在图片按下的时候改变明度为0.9,抬起的时候
恢复 到原图,也就是1。
ColorMatrix 可以对图片进行一些处理,这里就对图片明度变化进行操作。通过
setScale来改变明度 ,对图片的一些处理只能对ImageView的Src图片有作用,对背景是没有作用的。

两个主要的方法:

override fun onTouchEvent(event: MotionEvent?): Boolean {        super.onTouchEvent(event)        when (event!!.action) {            MotionEvent.ACTION_DOWN -> {                changeLight(0.9f)            }            MotionEvent.ACTION_UP -> {                changeLight(1f)            }        }        return true    }     //改变图片的亮度方法 1--原样  >1---调亮  <1---调暗  0-2    private fun changeLight(brightness: Float) {        val brightnessMatrix = ColorMatrix()        brightnessMatrix.setScale(brightness, brightness, brightness, 1f)        colorFilter = ColorMatrixColorFilter(brightnessMatrix)    }

附上源码:

/** * Created  on 2019/1/7 * Function 为了替换ImageView 的Selector * 因为图片的selector 把两张图片全部加载到内存中,大图片会导致内存占用较高 * 用代码 动态改变图片显示 减少内存占用 */class ReplaceSelectorImageView : AppCompatImageView {    private var norResId = 0    constructor(context: Context) : this(context, null, 0)    constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {        val typeArray = context.obtainStyledAttributes(attrs, R.styleable.ReplaceSelectorImageView)        norResId = typeArray.getResourceId(R.styleable.ReplaceSelectorImageView_norBackGround, 0)        typeArray.recycle()        if (norResId != 0) {            //改变图片颜色值 只有Src有用            setImageResource(norResId)        }    }    override fun onTouchEvent(event: MotionEvent?): Boolean {        super.onTouchEvent(event)        when (event!!.action) {            MotionEvent.ACTION_DOWN -> {                changeLight(0.9f)            }            MotionEvent.ACTION_UP -> {                changeLight(1f)            }        }        return true    }    //改变图片的亮度方法 1--原样  >1---调亮  <1---调暗  0-2    private fun changeLight(brightness: Float) {        val brightnessMatrix = ColorMatrix()        brightnessMatrix.setScale(brightness, brightness, brightness, 1f)        colorFilter = ColorMatrixColorFilter(brightnessMatrix)    }}

styles

                        

用法

  

以上就是用ImageVIew实现按下效果的全部代码了,希望对你有所帮助。

更多相关文章

  1. 浅谈Android中的基础动画(图文详解)
  2. ReactNative之Image在Android设置圆角图片变形问题
  3. Android(安卓)OpenGLES2.0(八)——纹理贴图之显示图片
  4. Android(安卓)各种图片转黑白图和抖动算法的黑白图
  5. Android(安卓)各种菜单,弹出菜单,打开文件子菜单,文本框的复制粘贴
  6. Android(安卓)compress图片压缩介绍
  7. android volley解析与二次封装
  8. 在Android图片缓存
  9. android 获取网络图片缓存(内存—>文件—>网络)

随机推荐

  1. android中src和background区别
  2. Android 性能优化系列总篇 (五)
  3. 系出名门Android(9) - 数据库支持(SQLite
  4. Android中backgroundDimEnabled的作用
  5. android:属性 layout_alignParentRight an
  6. android 组件属性描述
  7. android 导入项目报错
  8. LinearLayout布局实现垂直水平居中
  9. Android安卓布局简介
  10. Android图表控件MPAndroidChart——曲线