最近写个小demo,嫌麻烦不想写selector,突然想到一个有意思的操作,尝试以后发现效果还可以,这里分享一下

主要逻辑就是写一个公用方法,取出入参View 的 BackgroundColor,然后将Color的R、G、B 三个值提出来,分别降低20%后再组成新的颜色,这样就得到了一个跟原色相比变暗一些的颜色,然后通过View.OnTouchListener 来控制背景色的还原,就得到了一个万能的selector


示例 (gif录制的时候有个字母写错了,请忽略):

 redButton.enableColorSelector()greenCardView.enableColorSelector()grayTextView.enableColorSelector()


源码:

fun View.enableColorSelector() {UIHelper.addColorSelector(this)
}class UIHelper {companion object {fun addColorSelector(view: View) {val color = getViewBackgroundColor(view)view.setOnTouchListener { v, event ->when (event.action) {MotionEvent.ACTION_DOWN -> {val r = 255.coerceAtMost((color.red * 0.8f).toInt())val g = 255.coerceAtMost((color.green * 0.8f).toInt())val b = 255.coerceAtMost((color.blue * 0.8f).toInt())setViewBackgroundColor(v, Color.rgb(r, g, b))}MotionEvent.ACTION_UP -> {setViewBackgroundColor(v, color)v.performClick()}else -> {}}true}}private fun setViewBackgroundColor(view: View, color: Int) {//暂时只考虑两种背景色,有特殊情况要继续加就可以了if (view is CardView) {view.setCardBackgroundColor(color)} else {view.setBackgroundColor(color)}}@ColorIntprivate fun getViewBackgroundColor(view: View): Int {//暂时只考虑两种背景色,有特殊情况要继续加就可以了return if (view is CardView) {view.cardBackgroundColor.defaultColor} else {val drawable = view.background as ColorDrawabledrawable.color}}}
}

Android 万能通用selector相关推荐

  1. android中适配器,android:打造万能通用适配器

    本文原创,转载请注明出处. 1.前言 listview作为安卓项目中一个的明星控件,它的适配器的写法是广大安卓开发者需要掌握和优化的技巧. 本文旨在介绍一个通用的适配器BaseCommAdapter写 ...

  2. Android:打造万能通用适配器

    原文地址:http://blog.csdn.net/q649381130/article/details/51781921 1.前言 listview作为安卓项目中一个的明星控件,它的适配器的写法是广 ...

  3. 帝国cms万能通用api二次开发核心包使用说明

    简介 帝国cms万能通用api二次开发核心包是一款可以用地对帝国cms进行二次开发,可进行开发微信小程序.百度小程序.支付宝小程序.轻应用.苹果ios安卓android.其他营销插件的二次开发核心包. ...

  4. Android进阶笔记09:Android 万能适配器

    1. Android 万能适配器      项目中Listview GridView几乎是必用的组件,Android也提供一套机制,为这些控件绑定数据,那就是Adapter.用起来虽然还不错,但每次都 ...

  5. ​零代码增删改查完全自动化的万能通用接口

    真正的大师,永远都怀着一颗学徒的心! 一.项目简介 零代码增删改查完全自动化的万能通用接口 二.实现功能 万能通用接口 无需再写接口文档 零代码 自动校验,并防止sql注入 数据接口完全自定义 三.技 ...

  6. Android 万能适配方案和UI屏幕适配 不同分辨率 最全面 最易懂的

    文章目录 1.屏幕尺寸 2.屏幕分辨率 3.屏幕像素密度 4.图片的适配方案 1.屏幕尺寸 屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米(下面有图文介绍) 比如常见的屏幕尺寸有2.4 ...

  7. 使用Vitamio打造自己的Android万能播放器(2)—— 手势控制亮度、音量、缩放

    前言 本章继续完善播放相关播放器的核心功能,为后续扩展打好基础. 声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over1 ...

  8. Vitamio打造自己的Android万能播放器

    前言 虽然Android已经内置了VideoView组件和MediaPlayer类来支持开发视频播放器,但支持格式.性能等各方面都十分有限,这里与大家一起利用免费的Vitamio来打造属于自己的And ...

  9. Android中的Selector的用法

    Android中的Selector主要是用来改变ListView和Button控件的默认背景.其使用方法可以按一下步骤来设计: (以在mylist_view.xml为例) 1.创建mylist_vie ...

最新文章

  1. 用零知识证明解决投票安全
  2. 转:GridView 中如何给删除按钮添加提示
  3. 微型计算机中负数以()存放,130.在微型计算机中,负数常用( )表示。
  4. mysql 5.5.41 下载_MySQL 5.5.41/5.6.22 发布下载
  5. 私人服务器能不能微信授权,微信授权流程
  6. 花呗将全面接入央行征信系统,拒绝接入将无法使用 网友:还好我不买房
  7. Weak References 和 Soft reference
  8. Oracle存在gap,发现gap及解决
  9. 无线网络(4) 无线网络基本工作原理
  10. Unity3D之UGUI基础6:Slider滑条
  11. 深度学习2.0-25.Train-Val-Test划分检测过拟合(交叉验证)
  12. 抖音源码有什么奥秘?抖音为什么能推动短视频开发的热度
  13. fms安装教程 linux_如何借助Pandora FMS监控CentOS和Ubuntu服务器?
  14. execution(* com.xxx.*.*(..))
  15. 遵循学术规范,避免学术不端
  16. MySQL:连接错误
  17. 第七章 Java基础类库
  18. 计算机一级幻灯片版式,ppt2010官方基础教程:添加不同版式幻灯片-powerpoint技巧-电脑技巧收藏家...
  19. 毕业设计——GPU地形高度查询
  20. 如何用数学课件制作工具演示正方体展开动画

热门文章

  1. 099node-MongoDB数据库添加账户
  2. HP3777打印机一行清晰一行不清晰
  3. re.match的使用方法
  4. verdi 文件格式转换及差异
  5. 微信的支付(二维码,APP)
  6. 怎么恢复大疆无人机TF卡误删除格式化的MP4和MOV视频
  7. 在web网页中打开word文档
  8. 广州蓝景分享—遇到网页慢,我们该怎么办?
  9. 有10名学生,每个学生的数据要求包括学号、姓名。3门课的成成绩,从键盘输入10个学生数据,要求打印出3门课总平均成绩以及最高分学生的数据(包括学号、姓名、三门课成绩、平均分数)。C++。
  10. python3 onvif协议 摄像头控制