CardView-卡片布局

简介

CardView是一个带圆角和阴影的FrameLayout,继承关系如下:

java.lang.Object↳    android.view.View↳  android.view.ViewGroup↳ android.widget.FrameLayout↳ androidx.cardview.widget.CardView

重要的属性有:

  • 圆角-对应xml属性:app:cardCornerRadius, 对应字段:radius
  • 阴影-对应xml属性:app:cardElevation, 对应字段:elevation;
  • padding-对应xml属性:app:contentPadding, 对应方法:setContentPadding();

举例

通过简介,大致对CardView有了一个初浅的认识,先来看一个简单的效果:

这个简单的例子中,使用SeekBar来动态控制CardView的圆角、阴影和padding。下面跟着源码看看实现原理:

  1. 创建布局文件activity_card_view.xml如下:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="vertical"android:paddingBottom="200dp"tools:context=".newfeature.CardViewActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Card View" /><androidx.cardview.widget.CardViewandroid:id="@+id/card_view"android:layout_width="200dp"android:layout_height="200dp"android:layout_marginTop="20dp"app:cardCornerRadius="0dp"app:cardElevation="0dp"app:contentPadding="0dp"><Viewandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_gravity="center"android:background="@android:color/holo_blue_light" /></androidx.cardview.widget.CardView><LinearLayoutandroid:layout_width="200dp"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="圆角" /><SeekBarandroid:id="@+id/sb_corner"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout><LinearLayoutandroid:layout_width="200dp"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="阴影" /><SeekBarandroid:id="@+id/sb_shadow"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout><LinearLayoutandroid:layout_width="200dp"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="边距" /><SeekBarandroid:id="@+id/sb_padding"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout>
    </LinearLayout>
    

    这里使用了一个简单的View进行填充,实际开发中可以根据需求替换为其他View或者ViewGroup

  2. 接下来是代码逻辑CardViewActivity.kt:

    class CardViewActivity : AppCompatActivity() {lateinit var mCardView: CardViewprivate lateinit var mSbCorner: SeekBarprivate lateinit var mSbShadow: SeekBarprivate lateinit var mSbPadding: SeekBarcompanion object {@JvmStaticfun startActivity(context: Context) {context.startActivity(Intent(context, CardViewActivity::class.java))}}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_card_view)mCardView = findViewById(R.id.card_view)mSbCorner = findViewById(R.id.sb_corner)mSbShadow = findViewById(R.id.sb_shadow)mSbPadding = findViewById(R.id.sb_padding)mSbCorner.setOnSeekBarChangeListener(BarChangeListener(WeakReference(this@CardViewActivity)))mSbShadow.setOnSeekBarChangeListener(BarChangeListener(WeakReference(this@CardViewActivity)))mSbPadding.setOnSeekBarChangeListener(BarChangeListener(WeakReference(this@CardViewActivity)))}class BarChangeListener(private val weakReference: WeakReference<CardViewActivity>) : SeekBar.OnSeekBarChangeListener {override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {when (seekBar?.id) {R.id.sb_corner -> weakReference.get()?.mCardView?.radius = progress.toFloat()R.id.sb_shadow -> weakReference.get()?.mCardView?.elevation = progress.toFloat()R.id.sb_padding -> weakReference.get()?.mCardView?.setContentPadding(progress, progress, progress, progress)}}override fun onStartTrackingTouch(seekBar: SeekBar?) {}override fun onStopTrackingTouch(seekBar: SeekBar?) {}}
    }
    

    这里使用SeekBar.OnSeekBarChangeListener的实例中的onProgressChanged()回调方法来动态设置CardView圆角、阴影和padding。

总结

项目开发中,使用CardView可以快速实现带立体感的页面和列表等功能,熟练掌握用法后能提高我们的开发效率。

CardView-卡片布局相关推荐

  1. Android CardView卡片布局详解(八)

    一.CardView简介 CardView卡片布局是Android 5.0之后推出的布局效果,一般用于显示阴影和圆角效果的UI.CardView继承自FrameLayout帧布局,所以它其实还是一个布 ...

  2. android自定义阴影的卡片布局,CardView卡片布局的简单使用

    有时候我们见到过App上有那种和卡片一样的布局,自定义的话太麻烦,于是有了大佬给我们集成了第三方,CardView卡片式布局设计 CardView简介 CardView继承自FrameLayout类. ...

  3. CardView 卡片布局的使用

    CardView继承自FrameLayout类,可以在一个卡片布局中一致性的显示内容. 卡片可以包含圆角和阴影.CardView是一个Layout,可以布局其他View. CardView被包装为一种 ...

  4. Android CardView卡片布局 标签: 控件

    CardView介绍 CardView是Android 5.0系统引入的控件,相当于FragmentLayout布局控件然后添加圆角及阴影的效果:CardView被包装为一种布局,并且经常在ListV ...

  5. Android开发之CardView卡片布局

    CardView介绍 CardView是Android 5.0系统引入的控件,相当于FragmentLayout布局控件然后添加圆角及阴影的效果:CardView被包装为一种布局,并且经常在ListV ...

  6. Material Design【Android-Toolbar,滑动菜单,悬浮按钮,卡片布局,下拉刷新和可折叠式标题栏及案例】

    文章目录 Material Design--界面设计 1.Toolbar,标题栏 2.滑动菜单 3.悬浮按钮和可交互提示 4.卡片布局 5.下拉刷新 6.可折叠式标题栏 Material Design ...

  7. java卡片布局显示效果_三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)...

    摘自 http://blog.csdn.net/liujun13579/article/details/7773945 卡片布局能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像一叠牌,组 ...

  8. java卡片布局源码_Java编程使用卡片布局管理器示例【基于swing组件】

    本文实例讲述了Java编程使用卡片布局管理器.分享给大家供大家参考,具体如下: 运行效果: 完整示例代码: package com.han; import java.awt.BorderLayout; ...

  9. java卡片布局例子_Java编程使用卡片布局管理器示例【基于swing组件】

    本文实例讲述了java编程使用卡片布局管理器.分享给大家供大家参考,具体如下: 运行效果: 完整示例代码: package com.han; import java.awt.borderlayout; ...

  10. html卡片布局按钮,Material Design风格动态网格卡片布局UI设计

    这是一款效果非常炫酷的Material Design风格动态网格卡片布局UI设计效果.在该效果中鼠标滑过卡片时会有阴影效果,当浏览器尺寸改变时,卡片大小会随着改变,整个网格布局有动态变化效果. 使用方 ...

最新文章

  1. python versions compatibility_为什么在python中迭代一个字典时必须调用.iteritems()?...
  2. excel判断字符串包含另一个字符串_【前端冷知识】如何正确判断一个字符串是数值?...
  3. 12015.linux通过代码或命令形式操作内存/dev/mem
  4. c#扩展方法奇思妙用高级篇八:Type类扩展
  5. 弹出ifame页面(jquery.reveal.js)
  6. html5实现效果代码,js+html5实现的自由落体运动效果代码
  7. l298n电机哪一端为正_L298N是如何控制直流电机正反转的
  8. 如何修改hosts文件?几种修改hosts文件的方法
  9. Kjava林林工具箱源代码(jbuilder工程)
  10. 通过hutool工具包实现将数据库中的全量数据导出,一张表一个sheet页,包含目录页,目录页和sheet页之间可以互相跳转
  11. 管理学中的纳什均衡理论分享
  12. Unity双人坦克大战竞速游戏,超简单教学
  13. 使用Windows Server 2003轻松建立森林间信任
  14. 好莱坞原则和IOC控制反转
  15. 几米的漫画<地下佚>的摘录
  16. 12.Struts2_通配符映射
  17. 计算机毕业设计PHP美发店会员管理系统(源码+程序+VUE+lw+部署)
  18. IPv6,AppStore 审核不是唯一选择它的原因
  19. CentOS生产环境设置及产品系统升级策略
  20. HTML+CSS教程(十)css3(3D属性详解及动画)

热门文章

  1. VBScript教程-第三章. 脚本的组成部分
  2. st7789 旋转_ST7789V彩屏驱动及显示代码
  3. nodejs中使用nodemon加载文件报错
  4. Linux Mii management/mdio子系统分析之四 mdio总线及phy驱动模型及其开发流程
  5. 拼音加加 4.0 正式版发布了
  6. python识别图像中的文字并点击_Python图像处理之识别图像中的文字(实例讲解)
  7. 基于图像识别的波形发生器
  8. 最全办公室租赁技巧,让你找到心仪的办公室
  9. 简单企业网络搭建(基于华为eNSP模拟器)
  10. java 遍历 文件_Java的后台文件夹下文件的遍历完整代码