自定义控件实现imageview的点击效果
来源:互联网 发布:为什么淘宝上没有慢充 编辑:程序博客网 时间:2024/04/30 16:56
自定义控件给Imageview设置点击效果
Imageview的点击效果,可能是个很容易被忽视的问题。
对于本地图片的点击效果,可以准备两张图片,加selector实现。
但是如果是动态加载来的图片呢?动态加载图片的一般应用场景都是在listview等控件中,这个时候通常是给itemview整体设置点击效果,而通常不需要imageview反馈点击效果。这个效果我就不举例了,有点开发经验的应该都很熟练了。
但是有时候我们需要Imageview来显示点击的效果,当itemview中Imageview控件作为主体占据全部或者绝大多数面积的时候。
比如豆瓣阅读中书列表
来分析下这种效果的实现逻辑,最直接能想到的就是继承view,然后在onDraw方法里画图片,监听onTouchEvent事件改变绘制内容的状态。但是我们已经有了Imageview这个现成的类为我们做好了许多工作,所以本文采用继承自Imageview的方式。Imageview内容的绘制当言也是在onDraw方法中,关于点击事件的触发处理,当言也可以放在onTouchEvent方法中,但是我阅读了下view的源码发现有一个天然的回调方法dispatchSetPressed,或许可以一试。
选好了内容改变的时机,接下来就是内容改变的方式。我第一个想法图片变暗就像多绘制了一层透明的黑色,代码如下
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (pressed) { canvas.drawColor(Color.parseColor("#7a000000")); } } @Override protected void dispatchSetPressed(boolean pressed) { super.dispatchSetPressed(pressed); this.pressed = pressed; invalidate(); }
效果也还行
但是对于一些内容图片本身不是矩形的情况就不好使了。所以不是最佳方案。
那怎么能针对所有的图片都有效果呢,答案自然是改变绘制的内容本身。
既然改变内容,imageview绘制的主要内容当然就是里边的drawable对象了,看看drawable对象的一些方法。
第一个方法clearColorFilter吸引了我的注意,既然是clearColorFilter,drawAble对象肯定用到了ColorFilter,于是想到了爱哥文章自定义控件其实很简单1/6中提到的一个变暗的ColorFilter,或许可以一战。
代码如下:
final ColorMatrix colorMatrix = new ColorMatrix(new float[] { 0.5F, 0, 0, 0, 0, 0, 0.5F, 0, 0, 0, 0, 0, 0.5F, 0, 0, 0, 0, 0, 1, 0, }); @Override protected void dispatchSetPressed(boolean pressed) { super.dispatchSetPressed(pressed); if (pressed) { getDrawable().setColorFilter(new ColorMatrixColorFilter(colorMatrix)); } else { getDrawable().setColorFilter(null); } }
注意这里使用getDrawable得到的对象就是绘制的内容,调用方法setColorFilter之后就会回调drawable对象绑定的回调对象也就是当前的view对象的invalidate方法。所以不用手动再调用invalidate方法。
最后附上一个整体的效果。
第一个imageview的背景selector
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <color android:color="#efefef"></color> </item> <item android:state_pressed="false"> <color android:color="#ffffff" /> </item></selector>
- 自定义控件实现imageview的点击效果
- 自定义控件之ImageView实现点击之后有阴影效果
- Android自定义点击效果的ImageView
- Android 自定义Imageview的点击效果
- 自定义ImageView,点击反馈效果
- android 自定义控件样式点击效果实现
- 自定义ImageView控件,实现点击高亮图标
- Android,自定义一个点击变暗效果的ImageView
- 自定义控件实现带进度条的ImageView
- 不用Drawable来实现Imageview的点击效果
- ImageView使用一张图片做出selector效果,控件点击出现波纹效果,友好的交互。
- 史上最简单的自定义控件之单图片实现Button的点击效果(雷惊风)
- Android 自定义控件 改变图片颜色来实现类似selector点击更改颜色的效果
- Android 自定义ImageView实现src属性的选择器效果
- 自定义圆形图片ImageView的简单实现效果
- 自定义类似ImageView的控件
- ImageView和TextView的background点击效果
- Android中ImageView的点击变暗效果
- Java JDBC批处理插入数据操作(转)
- 线程属性总结(二)
- 不用翻墙就实现android SDK 更新方法
- Android:布局实例之常见用户设置界面
- 定制UITabbar样式
- 自定义控件实现imageview的点击效果
- 树莓派的gpio python使用
- Android启动过程深入解析
- HiWork发布1.7.0新版本——可开启频道公开链接,增加HiWork客服功能及集成应用麦客
- sublime汉化
- App Transport Security(ATS)
- mySQL学习
- 将32位代码向64位平台移植的注意事项
- C++ 二维数组 的动态创建 代码