第一种,使用LayerDrawable

对应的xml标签是 layer-list。

<?xml version="1.0" encoding="utf-8"?>                                                                                                            

布局中

<?xml version="1.0" encoding="utf-8"?>                

效果

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

 

第二种 使用android:elevation属性

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

布局代码

<?xml version="1.0" encoding="utf-8"?>                

效果

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'}

布局中

<?xml version="1.0" encoding="utf-8"?>                

效果

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

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

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

 

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

 

 

 

 

 

更多相关文章

  1. android Manifest.xml全局配置文件中根标签中package属性及标签
  2. android:layout_alignleft layout_toleftof区别,详解RelativeLayo
  3. Android基础入门教程——8.4.4 Android动画合集之属性动画-又见
  4. Android属性动画使用浅析
  5. Android布局学习之――按钮居中
  6. Android MainActivity如何加载BaseActivity的布局
  7. Android Layout Tricks #1(Android 布局技巧1)

随机推荐

  1. Android五子棋游戏设计与实现
  2. 快速构建Android应用原型实践
  3. android ios浏览器请求头
  4. Android 悬浮框的实现
  5. Android好奇宝宝_09_Handler Looper Mess
  6. mono for android software自动更新
  7. 升级Android Studio3.0时遇到的几个问题
  8. webView组件使用指南
  9. Android GB28181 SIP注册
  10. ListView 输入法框遮挡内容