Android使用shape绘制阴影图层阴影效果示例
作者:York_zhang 发布时间:2021-11-25 01:19:39
标签:Android,shape,阴影
最近在项目中用到一个比较有意思的阴影特效
从上面的效果图上可以发现在图片的右、下有一个阴影的特效,通过这个阴影效果明显会使得这个提示文本有一种立体的观感。瞬间高大上有木有?
基于以上UI效果,有两种最基本的实现方式:UI给出阴影底图和程序猿自我实现两种。
在这里UI设计师给出阴影底图的方式我们就不做讨论了,我们来看下程序猿自我实现的方式怎么做。
首先我们来分析一下上面UI效果,我们不难发现其实上图所示的ui效果本质上可以看成两个图层的叠加,那么有的小伙伴就要说了不就是两个图层的叠加嘛,用画笔(paint)和画布(cavns)来画就好了。但就我个人而言我觉得用画笔来画这种方式有点麻烦了。我们可以想到的另一个神器shape,我们用两个shape来叠加不就好了吗?说干就干,直接上代码:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 第一层 上部和左部偏移一定距离-->
<item
android:left="2.66dp"
android:top="2.66dp">
<shape>
<solid android:color="#f5f5f5" />
<!-- 描边 -->
<stroke
android:width="1dp"
android:color="#f5f5f5" />
</shape>
</item>
<!-- 第二层 下部和有部偏移一定距离-->
<item
android:bottom="2.66dp"
android:right="2.66dp">
<shape>
<solid android:color="#ffffff" />
<!-- 描边 -->
<stroke android:width="0.33dp" android:color="#dedede" />
</shape>
</item>
</layer-list>
是不是实现起来超简单。也许有些初学者可能会有疑惑,你说解决了就解决了啊?好吧,别急。照顾初学者的感受,我这里给出它的详细使用方法:
1、在res/drawable目录下新建一个文件,这个文件内容就是如上的代码,文件名就随你喜欢了,但我们最好还是按照命名规则来的好(姑且定义为tips_shadow_bg.xml)
2、在布局文件内所需要使用该效果的控件内设置background为这个drawable即可
如:
<textview
android:id="@+id/textview1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="使用shape绘制阴影图层阴影效果"
android:background="@drawable/tips_shadow_bg">
</textview>
至此,大功告成!
来源:https://blog.csdn.net/q390345932/article/details/46536655


猜你喜欢
- 在java项目开发中。最开始换行符大家一般是在idea中设置新文件为LF,并且对旧文件通过IDEA下方的点击来更换换行符。很显然,对于几千文
- 本文实例讲述了Java常用HASH算法。分享给大家供大家参考,具体如下:/*** Hash算法大全<br>* 推荐使用FNV1算
- 本文实例讲述了java版微信公众平台消息接口应用方法。分享给大家供大家参考,具体如下:微信公众平台现在推出自动回复消息接口,但是由于是接口内
- 1. 起源KV项目下载底层重构升级决定采用独立进程进行Media下载处理,以能做到模块复用之目的,因此涉及到了独立进程间的数据传递问题。目前
- 一、什么是设计模式设计模式(Design pattern) 是解决软件开发某些特定问题而提出的一些解决方案也可以理解成解决问题的一
- 在本文中,我们将看到几个关于如何在Java 8中对List进行排序的示例。1.按字母顺序排序字符串列表List<String>
- 1. 出故障了没办法,干it这一行,就得天天面对故障,大家就是传说中的消防员,到处救火。不过,这次的故障范围有点大,宿主机都打不开了。好在监
- 前言泛型在java中有很重要的地位,无论是开源框架还是JDK源码都能看到它。毫不夸张的说,泛型是通用设计上必不可少的元素,所以真正理解与正确
- 最新的IDEA激活方式使用网上传统的那种输入网址的方式激活不了,使用http://idea.lanyus.com/这个网站提供的工具进行1、
- 前言:最近公司在项目开发中,由于华为手机存在部分的问题。所以购买了部分新款的华为手机。在真机调试项目APP时,老是无法出现Logcat打印出
- 在Android开发者网站的 "外部存储技术信息"文档中描述道 : WRITE_EXTERNAL_STORAGE只为设备
- 一般来说,在更新DataTable或是DataSet时,如果不采用SqlParameter,那么当输入的Sql语句出现歧义时,如字符串中含有
- 本文实例讲述了C#实现的JS操作类。分享给大家供大家参考。具体如下:这个C#类封装了常用的JS客户端代码操作,包括弹出对话框、返回上一页,通
- Executor接口基于以下方法可以完成增,删,改查以及事务处理等操作。事实上,mybatis中的所有数据库操作是通过调用这些方法实现的。p
- 一、前言尽管Unity有一个像样的脚本编辑器(Mono),但很多人喜欢使用另一个编辑器。这篇短文解释了如何更改脚本编辑器,并介绍了Mono的
- 一、注解(annotations)列表@SpringBootApplication:包含了@ComponentScan、@Configura
- 算法效率在使用当中,算法效率分为两种,一是时间效率(时间复杂度),二是空间效率(空间复杂度)。时间复杂度是指程序运行的速度。空间复杂度是指一
- 本文实例讲述了Android开发实现读取Assets下文件及文件写入存储卡的方法。分享给大家供大家参考,具体如下:调用一个反编译的.so文件
- 数据层测试事务回滚pom.xml导入对应的一些坐标,mysql,Mp,等<dependency> &
- 一:什么是classpath?classpath指的就是 *.java文件,资源文件等编译后存放的位置,对于maven项目就是指 targe