为CircleImageView添加阴影

在5.X以上的版本可以使用elevation属性为控件添加阴影,但是需要控件设置了background属性并且不能设置颜色为transparent。

为CircleImageView添加阴影_第1张图片
Snip20161013_11.png
  • 左边是只给CircleImageView添加了elevation属性的结果,由于没有设置background属性,所以看不到阴影。
  • 中间是给CircleImageView添加了elevation和background属性,确实出现了阴影,但是阴影是矩形的而且多出了不是透明颜色的背景。
  • 而右边的图就是我们想要的结果。

ViewOutlineProvider

5.X提供这这个类,看文档的说明是

used for shadow casting and clipping

大意是用于裁剪阴影。
所以通过使用ViewOutlineProvider给CircleImageView设置outline,便可以设置阴影。


只需要设置elevation属性,不需要设置background属性。
java代码:

//获取outline
ViewOutlineProvider vop = new ViewOutlineProvider() {
    @Override
    public void getOutline(View view, Outline outline) {
        //修改outline
        outline.setOval(0,0,view.getWidth(),view.getHeight());
    }};
//重新设置
mCircleImageView3.setOutlineProvider(vop);

你可能感兴趣的:(为CircleImageView添加阴影)