Android5.x:RippleDrawable + CardView

2024-01-28 21:32

本文主要是介绍Android5.x:RippleDrawable + CardView,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RippleDrawable

参考:AndroidStudyDemo之Android5.x新控件介绍(一)

简介

Android5.x的水波纹效果就是通过RippleDrawable实现的,根据有无边界可以分为:右边界效果 + 无边界效果。边界类型可以是mipmap,也可以是自定义的drawable(shape),可以是是drawabel(selector).API>=21才可以使用。

  • 在drawable创建xml文件
  • 根节点是ripple,属性color是水波纹的颜色
  • ripple节点下是item节点:android:id="@android:id/mask"表示有水波纹边界,android:drawable=""边界drawable

无边界水波纹

效果图:
这里写图片描述

<TextViewstyle="@style/TextStyle1"android:background="@drawable/no_mask_ripple"android:text="无边界"/>

no_mask_ripple.xml

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"android:color="@color/colorPrimary">
</ripple>

有边界水波纹

效果图:
这里写图片描述

<TextViewstyle="@style/TextStyle1"android:background="@drawable/mask_ripple"android:text="有边界"/>

mask_ripple.xml

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"android:color="@color/colorPrimary"><item
        android:id="@android:id/mask"android:drawable="@android:color/holo_blue_dark"/>
</ripple>

图片作为边界

效果图:
这里写图片描述

<TextViewstyle="@style/TextStyle1"android:background="@drawable/pic_mask_ripple"android:text="图片作为边界"/>

pic_mask_ripple.xml

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"android:color="@color/colorPrimary"><item
        android:id="@android:id/mask"android:drawable="@mipmap/ic_launcher"/>
</ripple>

自定义边界

效果图:
这里写图片描述

<TextViewstyle="@style/TextStyle1"android:background="@drawable/custom_mask_ripple"android:text="自定义边界"/>

custom_mask_ripple.xml

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"android:color="@color/colorPrimary"><item
        android:id="@android:id/mask"android:drawable="@drawable/custom_ripple_mask_shape"/>
</ripple>

custom_ripple_mask_shape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><corners android:topLeftRadius="100dp"/><solid android:color="@color/colorAccent"/></shape>

带有selector的边界ripple

效果图
这里写图片描述

<TextViewstyle="@style/TextStyle1"android:background="@drawable/selector_mask_ripple"android:text="带有selector的ripple"/>

selector_mask_ripple.xml

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"android:color="@color/colorPrimary"><item><selector><item
                android:drawable="@mipmap/ic_resume"android:state_pressed="true"/><item
                android:drawable="@mipmap/ic_update"android:state_pressed="false"/></selector></item>
</ripple>

源码

RippleDrawableDemo01Recommend_gray

CardView

参考:AndroidStudyDemo之Android5.x新控件介绍(二)

效果图:

这里写图片描述

简介

CardView 就是 Material Design 设计语言中关于 Card 卡片概念的实现。API>=21 Android5.0 使用

  • CardView 可以在一个卡片布局中一致性的显示内容
  • CardView 是一个 Layout,可以布局其他 View
  • CardView 在 FrameLayout 之上添加了圆角和阴影效果

属性

常用属性

  • card_view:cardElevation:阴影的大小
  • card_view:cardMaxElevation:阴影最大高度
  • card_view:cardBackgroundColor:卡片的背景色
  • card_view:cardCornerRadius:卡片的圆角大小
  • card_view:contentPadding:卡片内容于边距的间隔
    card_view:contentPaddingBottom
    card_view:contentPaddingTop
    card_view:contentPaddingLeft
    card_view:contentPaddingRight
    card_view:contentPaddingStart
    card_view:contentPaddingEnd
    card_view:cardUseCompatPadding
    设置内边距,V21+的版本和之前的版本仍旧具有一样的计算方式
  • card_view:cardPreventConrerOverlap:在V20和之前的版本中添加内边距,这个属性为了防止内容和边角的重叠

API>=21:

android:elevation="50dp"

无限制

app:cardElevation="50dp"

使用步骤

1 导包

dependencies {...compile 'com.android.support:cardview-v7:25.0.0'...
}

2 使用 CardView 作为 Layout

CardView 没有什么神秘的,就是一个 FrameLayout 的特效版(Framelayout 有的它都有,Framelayout 没有的它也有),直接用就好了:

<android.support.v7.widget.CardViewandroid:id="@+id/cardView"android:layout_width="match_parent"android:layout_height="200dp"app:cardBackgroundColor="@color/colorPrimary"app:cardCornerRadius="20dp"app:cardElevation="50dp"app:cardMaxElevation="50dp"android:clickable="true"android:foreground="?android:attr/selectableItemBackground"><ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:scaleType="fitXY"android:src="@mipmap/show_img2"/><TextViewandroid:layout_width="wrap_content"android:layout_height="30dp"android:gravity="center"android:text="jadjdjowjqoejqljlq"android:layout_gravity="bottom|center_horizontal"/></android.support.v7.widget.CardView>

3、设置 CardView 的属性

CardView 提供了一个 cardElevation 和 cardCornerRadius 属性,这就是它给 FrameLayout 加的特效。

Layout:

  • cardElevation:用来设置 CardView 的Z轴阴影,Android 5.0 以上有效
  • cardCornerRadius:用来设置 CardView 卡片的四角圆角矩形程度

Java 代码:

  • setCardElevation()
  • setRadius()
seekBar_radius.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean b) {cardView.setRadius(progress);}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}
});

4、添加点击效果

默认情况,CardView 是不可点击的,并且没有任何的触摸反馈效果。触摸反馈动画在用户点击CardView时可以给用户以视觉上的反馈。为了实现这种行为,必须提供以下属性:

<android.support.v7.widget.CardView...android:clickable="true"android:foreground="?android:attr/selectableItemBackground"...
/>

使用android:foreground=”?android:attr/selectableItemBackground”可以使CardView点击产生波纹的效果,有触摸点向外扩散。

其实大部分View添加下面的代码都有水波纹效果。

android:background="?android:attr/selectableItemBackground"
android:clickable="true"

CardViewandroid:foreground="" 但是TextViewandroid:background=“”+android:clickable=""

5、遇到的问题

1 没有阴影效果

CardView有阴影是因为属性app:cardElevation=,而不是android:elevation=,但凡是CardView特有的属性,都已card

这里写图片描述

这篇关于Android5.x:RippleDrawable + CardView的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/654831

相关文章

安卓实战开发之CardView的selector及GrideView的item按下状态保留selector(state_activated)的实现

android的selector对于android开发者而言再熟悉不过了,只要定义一个drawable目录下定义一个selector的xml文件,在布局文件中background引用这个xml文件或者在代码中setBackgroundDrawable的时候使用此xml就可以实现控件按下或有焦点或激活状态等不同状态的效果。你真的对selector的使用全了解吗? 前言 项目中确实用到了像多个标签

关于emjoy表情在android5.x以上系统触发jni错误的修改(基于cocos2dx2.1.5修改)

一直纠结着这个错误,后来看别人的文章找到灵感,于是完善了基于cocos2dx2.1.5修改的 具体报错:JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal continuation byte 0xed 解决办法(基于coocs2dx2.1.5): 在CCImage.cpp里面的g

RecyclerView和CardView的使用以及注意

转载请注明出处 作者:AboutJoke ( http://blog.csdn.net/u013200308 ) 原文链接:http://blog.csdn.net/u013200308/article/details/51244289 距离RecyclerView和CardView的出现已经很久了,网上也有很多关于这方面的博客。因为最近自己在项目中用到了Material Design设计规

【WinForm+DevExpress】CardView 设置字段的样式

效果图 TotalAmount字段是新加的,用来计算总价(orderPrice*orderCount),在数据库表中不存在 实现 第一步:添加一个GridControl,设置在父容器中停靠,设置数据源,将GridControl的MainView转换成CardView 第二步:在Run DesDesigner设计界面中新加一列TotalAmount,设置列的Caption属性和Field

gradle 编译问题 Could not resolve recyclerview|glide|cardview|design

今天尝试编译一个项目 引入了以下库 recyclerview glide cardview design 一直编译失败 没办法 一个个试吧,结构每一个都遇到类似如下的问题 Could not resolve com.github.bumptech.glide:glide:3.7.0 对于这种问题 网上搜到了两种解决方案: 1.用本地版本 2.更改网络配置 从网络获取 一 使用本地依赖 参考:

Android 中简单使用RecyclerView 和CardView

开发环境 android studio 2.0 添加依赖 找到当前项目的build.gradle文件,添加依赖的jar包。或者在as中选中file,选择project structure,选中你的 module 然后选择 dependencies,添加 library dependency 即可。 dependencies {compile fileTree(include

cardView使用

1.cardview相当于个升级版的FrameLayout 如果设置属性 app:cardUseCompatPadding="true" 则会出现上图中的分割效果 属性app:cardElevation="2dp" 则会出现上图的立体效果 会有阴影 属性app:cardCornerRadius="3dp" 则会出现上图的圆角效果 <?xml version="1.0" encodi

Android开发之CardView概述与分析

一、引言         在移动应用界面设计中,卡片式布局因其美观和清晰的信息组织方式而广受欢迎。Android开发中的CardView控件为开发者提供了一种简便的方式来实现这种布局。本文将深入探讨CardView的概念、特点、优缺点以及应用场景。 二、CardView概述         CardView是Android支持库中的一个UI组件,它用于创建具有圆角和阴影效果的卡片式布局。自A

Android5.x 新控件之RecyclerView使用总结

一、RecyclerView控件的简单介绍 RecyclerView出现快一年多了,相信大家肯定不陌生了,大家可以通过导入support-v7对其进行使用。  据官方的介绍,该控件用于在有限的窗口中展示大量数据集,其实这样功能的控件我们并不陌生,例如:ListView、GridView。 那么有了ListView、GridView为什么还需要RecyclerView这样的控件呢?整体

简化高仿以及源码分析Android 5.0的CardView

需求: 为了实现定制化的CardView效果,想要定制每一个角落都是圆弧或者直角的需求,需要了解CardView的绘制原理。  CardView核心思想: 像版本控制就不讲了,只分析如何绘制圆角和阴影的,以下是源码的注释,整体看起来很复杂,但核心步骤就几行代码: 主要涉及这个类: RoundRectDrawableWithShadow public void draw(