android 一张图片实现 ImageView 实现 点击效果 图片明度变化
16lz
2021-01-26
一般实现点击效果我们都是使用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实现按下效果的全部代码了,希望对你有所帮助。
更多相关文章
- 浅谈Android中的基础动画(图文详解)
- ReactNative之Image在Android设置圆角图片变形问题
- Android(安卓)OpenGLES2.0(八)——纹理贴图之显示图片
- Android(安卓)各种图片转黑白图和抖动算法的黑白图
- Android(安卓)各种菜单,弹出菜单,打开文件子菜单,文本框的复制粘贴
- Android(安卓)compress图片压缩介绍
- android volley解析与二次封装
- 在Android图片缓存
- android 获取网络图片缓存(内存—>文件—>网络)