android 从5.0开始,Material Design风格盛行,这一次真的从UI交互上把ios按在地上摩擦,作为我们android 开发者,当然也要认真学习MD控件,包括

  • TextInputLayout
  • CardView
  • SwitchCompat
  • SnackBar
  • FloatingActionButton
    以及更多的,这里本文主要讲类似实现cardView 卡片式效果的方法,比cardView更简单的那种


    Android 控件布局实现卡片效果,阴影效果_第1张图片 image.png

cardView我用的很多,不过感觉还是比较麻烦的,需要记住以下属性

app:cardBackgroundColor这是设置背景颜色 app:cardCornerRadius这是设置圆角大小 app:cardElevation这是设置z轴的阴影 app:cardMaxElevation这是设置z轴的最大高度值 app:cardUseCompatPadding是否使用CompatPadding app:cardPreventCornerOverlap是否使用PreventCornerOverlap app:contentPadding 设置内容的padding app:contentPaddingLeft 设置内容的左padding app:contentPaddingTop 设置内容的上padding app:contentPaddingRight 设置内容的右padding app:contentPaddingBottom 设置内容的底padding

使用cardView作为容器,里面就可以包裹控件,从而实现卡片式效果,也是支持阴影的,但是,我要说的,cardView布局更简单!

在5.0版本以上,任意的viewgroup 组件,像LinearLayout,ScrollView,ConstraintLayout等等布局中,只需要加入三个属性即可,

  • android:elevation="3dp"
  • android:outlineProvider="bounds"
  • android:translationZ="3dp"
  • android:background="@drawable/shape_popwin_bg_white"

background是一个圆形圆角shape,这里就不贴了
MD设计里面,视图可以投射阴影, elevation 值决定了阴影的大小和顺序。通俗来讲,就是elevation是一个权重,是阴影的初始值,是在静态的,相应的,translationZ则是动态值,是在Z轴上的偏移变化,阴影效果,其实就是抬高控件的Z轴,使之呈现立体的感觉,那么久可以很好地显示阴影。
Z=elevation+translationZ
这样是不是就好理解了呢?我们来看一下效果图

Android 控件布局实现卡片效果,阴影效果_第2张图片 image.png
是不是已经有了卡片效果的感觉,更重要的是比使用CardView 更加简单高效!
但是如果运行到真机,仔细观察,你会发现,虽然我们的shape是圆角的,但是,圆角下面的阴影居然是尖角的,这个问题,让我一时间摸不着头脑,难道是shape的问题?
一番尝试后我发现原来是outlineProvider属性的问题,那么我们来学习下这个属性

outlineProvider用来指定轮廓的判定方式

Android 控件布局实现卡片效果,阴影效果_第3张图片 image.png

通过编辑器可以看出,总共有四种指判方式:

  • none 即使设置了Z属性,也不会显示阴影
  • background 会按照背景来设置阴影形状
  • bounds 会按照View的大小来描绘阴影
  • paddedBounds 和bounds类似,不过阴影会稍微向右偏移一点


    Android 控件布局实现卡片效果,阴影效果_第4张图片 image.png
Android 控件布局实现卡片效果,阴影效果_第5张图片 image.png

原来设置了bounds ,轮廓会按照view的大小来绘制阴影,这也就不难解释,为什么设置了圆角shape后,阴影依然存在尖角问题,哈哈,现在你明白了吗?
如果你的阴影效果没显示,那么我建议你从以下几个方面检查

  • 是否是设置在ViewGrop控件上
  • 是否留够了边距用来显示阴影
  • 是否设置了背景色,最好是用shape
  • 是否开启了硬件加速
    OK,就是这样,以后就愉快地使用阴影效果吧!

更多相关文章

  1. 使用eclipse与android studio 在开发自定义控件时的区别
  2. 去掉ScrollVIew拉到尽头时再拉的阴影效果
  3. 介绍一个Android的开源的自定义小控件:TextDrawable
  4. Android常见的十个高级控件
  5. Android各种花式酷炫自定义控件开源库集合
  6. Android控件重叠显示小记

随机推荐

  1. Android(安卓)App 的设计架构:MVC、MVP、M
  2. Android进阶(jni部分三)ABI
  3. android 实现从网络上抓取图片并显示在手
  4. android view statusBar 沉浸式
  5. android模块化app开发笔记-1环境搭建
  6. Android之路——第一个上线 APP项目总结
  7. 适用于Android的最佳免费待办事项列表应
  8. Android(安卓)使用模板生成Word文档,支持
  9. 在 SQL 数据库中保存数据
  10. android 中用代码模拟发送按键