Android 如何把整个页面置为灰色?

开发Android应用时,当某功能不可用时,需要把该View变为灰色。 或者某个特殊节日时,也需要把整个页面置灰。

正常情况下,单个按钮可以通过给按钮添加多种状态来实现。

但如果已经开发完成,或者不仅局限于某个Button时(如整个APP的所有页面),  通过状态的方式工作量巨大。所以需要一种非侵入式的方式去掉View的色彩,降低工作量。

为此可以通过给布局根节点的View(ViewGroup)添加上饱和度过滤器来实现。当饱和度为零时,此时整个页面就会变成灰色,当饱和度为1时,为原本的颜色。同时不影响已有的逻辑。

效果如下:

使用方法如下:

SaturationView.getInstance().saturationView(rootView, 0f); # 将整个页面置灰, rootView 代表页面的根布局
SaturationView.getInstance().saturationView(rootView, 1f); # 将整个页面调整为正常色彩

SaturationView.java 源代码如下:

package org.tcshare.utils;

import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Paint;
import android.view.View;

/**
 * 去掉色彩,变灰
 * @author 爱T鱼
 */
public class SaturationView {
    private final Paint paint = new Paint();
    private final ColorMatrix cm = new ColorMatrix();
    private SaturationView(){

    }
    private static SaturationView instance;
    public static SaturationView getInstance(){
        synchronized (SaturationView.class) {
            if (instance == null) {
                instance = new SaturationView();
            }
        }
        return instance;
    }
    public void saturationView(View view, float saturation){
        cm.setSaturation(saturation);
        paint.setColorFilter(new ColorMatrixColorFilter(cm));
        view.setLayerType(View.LAYER_TYPE_HARDWARE, paint);
    }

}

 

 

 

评论列表: