Android 背景颜色处理

    技术2025-11-17  15

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

    其一 :在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));

    最新回复(0)