APP全局色彩饱和度修改

APP全局色彩饱和度修改

对以下两篇鸿洋大神的博文进行了实践,并记录对应的问题。
App 黑白化实现探索,有一行代码实现的方案吗?
App 黑白化实现探索2, 发现了一种更方便的方案,我被锤了!

第一篇
第一篇采用是比较常规的方法,即在View绘制的时候改变色彩饱和度,以ImageView为例,代码如下:

public class MyTextView extends ImageView {

    Paint mPaint = new Paint();

    public MyImageView(Context context) {
        super(context);
        init();
    }

    public MyImageView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init(){
        ColorMatrix cm = new ColorMatrix();
        cm.setSaturation(0);
        mPaint.setColorFilter(new ColorMatrixColorFilter(cm));
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.saveLayer(null, mPaint, Canvas.ALL_SAVE_FLAG);
        super.onDraw(canvas);
        canvas.restore();
    }

}

如果是ViewGroup类型的需要在dispatchDraw中也做处理。

第二篇
第二篇的方案比较取巧,而且不熟悉源码的话大概没那么容易想到。view.setLayerType(layerType, null);View的硬件加速方法第二个参数可以设置Paint,对Paint设置相应的属性即可达到效果,代码如下:

Paint paint = new Paint();
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
mPaint.setColorFilter(new ColorMatrixColorFilter(cm));
view.setLayerType(View.LAYER_TYPE_HARDWARE, paint);

问题
1、第一种方法原文中提到对WebView、视频播放会有影响。
2、第一种方法我自己实践过程中发现View设置了Background会导致Background的饱和度不变,可能是我哪里需要再处理一下。
3、第二种方式我自己再实践过程中发现对视频拍摄有影响,会不断地闪。

你可能感兴趣的:(Android,android,移动开发,canvas)