Android 控件背景颜色处理

本文介绍了在Android中如何处理控件背景颜色,包括在XML中定义选择器、动态改变图片资源以及使用Drawable.setColorFilter()和ColorMatrix进行颜色过滤。通过ColorMatrix,可以实现对图片颜色的精细调整,实现各种颜色变化效果。

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

其一 :在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.youkuaiyun.com/kufeiyun/archive/2011/02/16/6187858.aspx


Android Studio中,可以使用定时器来修改控件背景颜色。下面是一个简单的示例代码,演示了如何使用定时器来定时修改控件背景颜色: 1. 首先,在XML布局文件中定义一个需要修改背景颜色控件,例如一个Button: ```xml <Button android:id="@+id/myButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Change Color" android:background="@color/default_color" /> ``` 2. 在Java代码中,使用Timer和TimerTask类来实现定时任务。在定时任务中,可以通过修改控件背景颜色来实现效果。以下是示例代码: ```java import java.util.Timer; import java.util.TimerTask; public class MainActivity extends AppCompatActivity { private Button myButton; private Timer timer; private int colorIndex = 0; private int[] colors = {R.color.red, R.color.green, R.color.blue}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myButton = findViewById(R.id.myButton); // 创建定时器 timer = new Timer(); // 创建定时任务 TimerTask timerTask = new TimerTask() { @Override public void run() { // 在定时任务中修改控件背景颜色 runOnUiThread(new Runnable() { @Override public void run() { myButton.setBackgroundResource(colors[colorIndex]); colorIndex = (colorIndex + 1) % colors.length; } }); } }; // 启动定时任务,延迟0毫秒后执行,每1000毫秒执行一次 timer.schedule(timerTask, 0, 1000); } @Override protected void onDestroy() { super.onDestroy(); // 取消定时器 timer.cancel(); } } ``` 在上述代码中,我们使用了一个定时器和一个定时任务。定时任务中通过runOnUiThread方法来修改控件背景颜色,确保在主线程中进行UI操作。定时任务每隔1秒钟执行一次,循环修改控件背景颜色。 请注意,上述代码中的colors数组是一个示例,你可以根据自己的需求定义不同的颜色数组。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值