博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Porter/Duff,图片加遮罩setColorFilter
阅读量:6160 次
发布时间:2019-06-21

本文共 1360 字,大约阅读时间需要 4 分钟。

同步发表于

Fork on github

经常会遇到给图片加蒙层/遮罩的需求,比如,头像上面需要一个半透明的黑色啊什么的,解决这种需求并不难,实现方案也很多,最生硬的可以直接在图片上再放一个view设置背景为半透明,或者自己写一个带透明效果的ImageView,或者巧妙的利用Android ImageView提供的一些属性如setColorFilter。下面分别实现三种方案。

colorfilter.png

添加额外视图

ImageView的父级用FrameLayout或RelativeLayout

自定义ImageView

在onDraw中额外在绘制一个半透明即可。

public class DimImageView extends ImageView {    public static int DEFAULT_DIM = 0x99000000;    int mDimColor;    public DimImageView(Context context) {        this(context, null);    }    public DimImageView(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    public DimImageView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.DimImageView, defStyleAttr, 0);        mDimColor = array.getColor(R.styleable.DimImageView_dim, DEFAULT_DIM);        array.recycle();    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        canvas.drawColor(mDimColor);    }}

利用PorterDuff

由于ImageView支持PorterDuff,所以了解相关属性的话,可以直接利用setColorFilter;

static final int MASK_HINT_COLOR = 0x99000000;mImage.setColorFilter(MASK_HINT_COLOR, mode);

小结

以上三种方式均可实现蒙层效果,但是第一种是最不好的,由于会增加不必要的视图层级。而自定义的好处是相对扩展性强,可以有更多地自定义控件。当然最方便的还是直接使用setColorFilter。

参考

转载于:https://www.cnblogs.com/avenwu/p/4299288.html

你可能感兴趣的文章
编译安装mysql-5.6.16.tar.gz
查看>>
活在当下
查看>>
每天进步一点----- MediaPlayer
查看>>
PowerDesigner中CDM和PDM如何定义外键关系
查看>>
跨域-学习笔记
查看>>
the assignment of reading paper
查看>>
android apk 逆向中常用工具一览
查看>>
MyEclipse 报错 Errors running builder 'JavaScript Validator' on project......
查看>>
Skip List——跳表,一个高效的索引技术
查看>>
Yii2单元测试初探
查看>>
五、字典
查看>>
前端js之JavaScript
查看>>
Log4J日志配置详解
查看>>
实验7 BindService模拟通信
查看>>
scanf
查看>>
Socket编程注意接收缓冲区大小
查看>>
SpringMVC初写(五)拦截器
查看>>
检测oracle数据库坏块的方法
查看>>
SQL server 安装教程
查看>>
Linux下ftp和ssh详解
查看>>