Android中给View设置阴影的三种方式

第一种,使用LayerDrawable

对应的xml标签是 layer-list。




    

    
        

            

            
        
    


    
    
    
        

            

            
        
    

布局中




        

        

效果

Android中给View设置阴影的三种方式_第1张图片

 

第二种 使用android:elevation属性

它是安卓5.0以后引入的属性,5.0以前不起作用,elevation相当于给view设置了高度,从而显示投影

布局代码




        

        

效果

Android中给View设置阴影的三种方式_第2张图片

关于android:elevation属性失效有以下原因

1没有给view设置具体的background,只设置颜色值是没有阴影的,应该设置成图片或者Drawable

2在Application中设置 android:hardwareAccelerated="false"属性关闭硬件加速会导致失效

3view中没有设置background时可以加上android:outlineProvider="bounds"属性阴影生效

参考资料:

https://www.cnblogs.com/ai394495243/p/5075758.html

https://www.jianshu.com/p/c1d17a39bc09

https://blog.csdn.net/njtuzhang/article/details/51580913

https://blog.csdn.net/sm7890123/article/details/81775819

https://blog.csdn.net/xiaoweiguoyuan/article/details/73469877

 

第三种,使用CardView

CardView也是安卓5.0以后引入的布局,自带阴影和圆角效果,它的父类是FrameLayout,可以包含子布局,由于CardView是出现在support包中的,它的兼容性很好,支持5.0以下的版本

需要在Android Studio中添加如下依赖

dependencies {
    implementation 'androidx.cardview:cardview:1.0.0'
}

没有使用androidx包可以使用support包

dependencies {
    implementation 'com.android.support:cardview-v7:28.0.0'
}

布局中




        

        

效果

Android中给View设置阴影的三种方式_第3张图片

CardView的阴影是自定义Drawable的类RoundRectDrawableWithShadow完成的

在draw(Canvas canvas)方法中调用了drawShadow(Canvas canvas),使用Canvas完成阴影绘制

 

总的来说,使用CardView比前两种方式要稍微方便一点,直接在布局中拿来使用,不用其他的操作,兼容性较好

 

 

 

 

 

你可能感兴趣的:(Android,Android阴影效果)