当前位置: 首页 > news >正文

Android 控件背景颜色处理

按钮的背景图片根据状态的不同而显示不同的图片,网上有介绍相关的方法。

其一 :在xml配置不同状态下的图片,然后绑定view的background属性,如下所示:

<?xml version="1.0" encoding="UTF-8"?>  
<selector xmlns:android="http://schemas.android.com/apk/res/android">  
 <item  android:state_pressed="false" android:drawable="@drawable/button_add" />  
     <item android:state_pressed="true" android:drawable="@drawable/button_add_pressed" />  
     <item android:state_focused="true" android:drawable="@drawable/button_add_pressed" />  
     <item android:drawable="@drawable/button_add" />  
 </selector>

其二 :根据View的鼠标或键盘事件,动态改变
view.setImageResource(R.drawable.press);

以上两种方法均需要对每种状态制作对应的图片

其三: 使用 Drawable.setColorFilter(),或者paint.setColorFilter()。如:

button.getBackground().setColorFilter(new LightingColorFilter(0xEEEEEFF, 0xFFAA0000))

这里主要说明一下 LightingColorFilter,它是一个 ColorMatrix对象,ColorMatrix对象用处较大,多用来对图片进行特效处理,如色彩变化、位置及变形处理。

ColorMatrix顾名思义颜色矩阵,google定义其为一个5x4的矩阵,但实际上使用一个一维数组表示的,其存储的值是用来对图片进行修正的。通过矩阵运算,修改图片的RGBA的值,来达到颜色变化的效果

[ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t ],转换成矩阵也就是如下所示:


a, b, c, d, e              R

 f, g, h,  i, j               G

k,  l, m, n, o              B

p, q,  r, s, t               A

                                1


R' = a*R + b*G + c*B + d*A + e;
G' = f*R + g*G + h*B + i*A + j;
B' = k*R + l*G + m*B + n*A + o;
A' = p*R + q*G + r*B + s*A + t;
经过运算后得到新的R'G'B'A'值,颜色可能发生了变化。当a,g,m,s都等于1而其他值为0时,会发现新的RGBA值和原来的一样,就是颜色不变,具体颜色混合配色效果,我就不懂了。代码例子可参考ApiDemo中的ColorFilter和ColorMatrixSample

 ColorMatrix cm = new ColorMatrix();  
 cm.set(new float[] {
                1, 0, 0, 0, 70,
                0, 1, 0, 0, 50,
                0, 0, 1, 0, 0,
                0, 0, 0, 1, 0 });
//btnPrevWeek.getBackground().setColorFilter(0xFFFF0000, Mode.MULTIPLY);
//btnPrevWeek.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF,0xFFAA0000));
 btnPrevWeek.getBackground().setColorFilter(new ColorMatrixColorFilter(cm));

 

from: http://blog.csdn.net/kufeiyun/archive/2011/02/16/6187858.aspx


相关文章:

  • Android完全退出程序问题综述
  • 打印Android程序所占内存
  • TraceView + 避免内存泄露, 有效利用内存
  • Android 开源项目列表
  • Android 软件安装程序(*.apk)的结构分析、反编译以及汉化
  • android 内存使用
  • android 常用adb shell
  • [转]android listview 连续调用 getview问题分析及解决。
  • android自动弹出软键盘
  • 使用Android自带的图标
  • 斯坦福iphone视频教程 – 中英字幕
  • Android中文文档——工具屋
  • Android 避免bitmap内存限制
  • 圆角背景的ListView
  • LayerDrawable层叠样式layer-list
  • @jsonView过滤属性
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • CentOS 7 防火墙操作
  • input的行数自动增减
  • java8-模拟hadoop
  • JavaScript异步流程控制的前世今生
  • Js基础知识(四) - js运行原理与机制
  • React组件设计模式(一)
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Spring框架之我见(三)——IOC、AOP
  • yii2中session跨域名的问题
  • 记一次删除Git记录中的大文件的过程
  • 将 Measurements 和 Units 应用到物理学
  • 聊聊hikari连接池的leakDetectionThreshold
  • 判断客户端类型,Android,iOS,PC
  • 深度学习入门:10门免费线上课程推荐
  • 使用putty远程连接linux
  • 提醒我喝水chrome插件开发指南
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #162 (Div. 2)
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (06)金属布线——为半导体注入生命的连接
  • (2015)JS ES6 必知的十个 特性
  • (6)添加vue-cookie
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (一)Neo4j下载安装以及初次使用
  • (转)我也是一只IT小小鸟
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .net中调用windows performance记录性能信息
  • @Autowired 与@Resource的区别
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @NestedConfigurationProperty 注解用法