Android进阶之路 - 字体阴影、文字阴影

news2024/9/21 16:42:15

最近几个月都挺忙,忙着工作,忙着成长…

一直以来我认为在开发中首当其冲的肯定是需求、功能,然后才是UI细节;所以我自己一般不太会去深究一些看不明显的UI,不过这俩日同事提醒我文字有阴影效果,细看之下果然UI设计图中有进行标注

嗯… 对于没接触过的技术,如果开发周期很充裕的话,我还是很愿意去研究,但是如果开发周期很短的话,我就比较反感未知的部分了… 不过有点尴尬的是 文字阴影效果 Android早就已经帮写好了,我们仅需调用几个属性即可…

      • 前置了解
      • 阴影实现
      • 阴影测试
        • 垂直偏移(shadowDx)
        • 水平偏移(shadowDy)
        • 阴影范围(shadowRadius)
      • 源码兴趣

前置了解

看一下UI提供的设计图(如果设计标注中没有标明阴影的偏移量、色值等数据可自行找UI要数值

在这里插入图片描述

有的人可能看到有提供Android的伪代码,其实伪代码没有阴影的设置部分

在这里插入图片描述


阴影实现

Android很早以前就提供了字体阴影的设置方式,关于如何设置文字的阴影效果,主要用到了以下四种阴影属性

  • android:shadowColor 阴影颜色
  • android:shadowDx 阴影水平偏移量
  • android:shadowDy 阴影垂直偏移量
  • android:shadowRadius 阴影范围

实现效果
在这里插入图片描述

实现布局

Tip:在设计标注中一般都是采用的px(像素),可自行设置px或dp看看效果,哪个合适选哪个

<?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:orientation="vertical"
    android:gravity="center_horizontal"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:gravity="center"
        android:text="正常字体" />

    <TextView
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:gravity="center"
        android:shadowColor="#687BF3"
        android:shadowDx="0"
        android:shadowDy="2"
        android:shadowRadius="4"
        android:text="阴影字体" />
</LinearLayout>

Look Here:如果仅是为了实现字体阴影的效果,那么看到这里就够了,有兴趣、有时间的可以继续往下看~


如果字体阴影场景比较多的话,也可以在 values - style.xml 写个Style

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

    <style name="shadowStyle">
        
        <item name="android:shadowColor">#687BF3</item>
        <item name="android:shadowRadius">4</item>
        <item name="android:shadowDx">0</item>
        <item name="android:shadowDy">2</item>
        
    </style>
</resources>

引用方式

    <TextView
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:gravity="center"
        style="@style/shadowStyle"
        android:text="阴影字体" />

阴影测试

经测试,得结果:水平偏移默认向右,垂直偏移默认向下;偏移值可为正负,不同值显示偏移方向所有不同

垂直偏移(shadowDx)

在这里插入图片描述

xml 片段

    <TextView
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:gravity="center"
        android:shadowColor="#687BF3"
        android:shadowDx="0"
        android:shadowDy="22"
        android:shadowRadius="1"
        android:text="阴影字体" />

经过测试,可设垂直偏移负值,显示向上

在这里插入图片描述

xml 片段

    <TextView
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:gravity="center"
        android:shadowColor="#687BF3"
        android:shadowDx="0"
        android:shadowDy="-22"
        android:shadowRadius="1"
        android:text="阴影字体" />

水平偏移(shadowDy)

在这里插入图片描述

xml 片段

    <TextView
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:gravity="center"
        android:shadowColor="#687BF3"
        android:shadowDx="22"
        android:shadowDy="0"
        android:shadowRadius="1"
        android:text="阴影字体" />

经过测试,可设水平偏移负值,显示向左

在这里插入图片描述

xml 片段

    <TextView
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:gravity="center"
        android:shadowColor="#687BF3"
        android:shadowDx="-22"
        android:shadowDy="0"
        android:shadowRadius="1"
        android:text="阴影字体" />

阴影范围(shadowRadius)

经测试,得结果:随着 shadowRadius 设置的越大,阴影效果也越大,但是也会越模糊

Tip:shadowRadius:0 - 1 - 5 - 50 - 500 显示效果

在这里插入图片描述

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_horizontal"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:gravity="center"
        android:text="正常字体" />

    <TextView
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:gravity="center"
        android:shadowColor="#687BF3"
        android:shadowDx="0"
        android:shadowDy="22"
        android:shadowRadius="1"
        android:text="阴影字体" />

    <TextView
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:gravity="center"
        android:shadowColor="#687BF3"
        android:shadowDx="0"
        android:shadowDy="22"
        android:shadowRadius="5"
        android:text="阴影字体" />

    <TextView
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:gravity="center"
        android:shadowColor="#687BF3"
        android:shadowDx="0"
        android:shadowDy="22"
        android:shadowRadius="52"
        android:text="阴影字体" />


    <TextView
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:gravity="center"
        android:shadowColor="#687BF3"
        android:shadowDx="0"
        android:shadowDy="22"
        android:shadowRadius="522"
        android:text="阴影字体" />
</LinearLayout>

源码兴趣

TextView的自定义属性开始追溯

在这里插入图片描述

values 自定义属性

在这里插入图片描述

TextViewsetShadowLayer 表示将绘制一个阴影,阴影部分不参与交互;同事说明了用到的自定义属性

在这里插入图片描述

PaintsetShadowLayer 表示在主层之下将绘制一个阴影层,范围为0就会移除该阴影层

在这里插入图片描述

PaintsetShadowLayer具体实现

在这里插入图片描述

nSetShadowLayer 好像是调C的方法,具体就不往下深究了

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/594471.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java000——超好用的工具推荐

下面介绍工具直接安装即可&#xff0c;基本上都是一路next&#xff08;有需要选择安装路径则选择自己的安装目录即可&#xff09; Everything Everything用于搜索电脑本地文件、文件夹&#xff0c;快速高效 下载地址 Snipaste截图工具 下载地址 notepad 轻量级文本编写查看…

C++11 右值引用

文章目录 一. 左值&#xff1f;右值&#xff1f;二. 右值引用的使用三. 万能引用&完美转发四. 移动构造&移动赋值结束语 一. 左值&#xff1f;右值&#xff1f; C中&#xff0c;对于左值&#xff0c;右值&#xff0c;我们可能会理解为 赋值符号左边是左值&#xff0c…

木棒 DFS经典题 剪枝优化 满注释版 java

&#x1f351; 算法题解专栏 &#x1f351; 题目地址 乔治拿来一组等长的木棒&#xff0c;将它们随机地砍断&#xff0c;使得每一节木棍的长度都不超过 50 50 50 个长度单位。 然后他又想把这些木棍恢复到为裁截前的状态&#xff0c;但忘记了初始时有多少木棒以及木棒的初始…

【数据结构与算法】最小生成树之普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法

&#x1f331;博客主页&#xff1a;大寄一场. &#x1f331;系列专栏&#xff1a;数据结构与算法 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 目录 前言 一、最小生成树的概念 二、最小生成树的求解方法 三、练习题 四、最小生成树在实际应用中的例…

返回类对象时,什么时候调用拷贝构造函数,什么时候会进行返回值优化(RVO)

#include<iostream> using namespace std;class Person { public:Person(){}Person(int age){m_Age age;}Person(const Person& p){cout << "拷贝构造函数" << endl;}Person fun(){cout << "fun this" << " "…

一步步教你如何剪辑出专业水平的视频

1. 视频字幕制作。媒体梦工厂软件提供了强大的字幕制作功能&#xff0c;可以自主设计字幕的颜色、大小、字体等属性&#xff0c;使字幕更加具有视觉冲击力。"媒体梦工厂软件是一款广受欢迎的影视后期制作软件&#xff0c;自从软件发布以来在行业内有着广泛的应用。本文将会…

使用redis模拟手机验证码发送及消费者与生产者案例

规定一个手机号一天只能请求三次验证码&#xff0c;且每次请求的验证码只有一分钟就会过期 package com.doit.demo;import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool;import java.util.Random; import java.util.Scanner;public class PhoneNum {publ…

Spark基础入门篇 | MapReduce原理 + Spark原理 + PySpark环境搭建 + 简单实战

&#x1f604; 之前简单了解过Spark&#xff0c;并简单用别人的代码跑过pyspark的数据处理和模型的分布式推理&#xff0c;但没做系统的总结&#xff0c;那这篇博客就对Spark做个基础入门讲解&#xff0c;看完基本就算基础入门了&#xff0c;后面再实操就会轻松一些。 文章目录…

Windows本地提权 · 下篇

Windows本地提权&#xff0c;这种提权适用于有一本地个用户的基础上&#xff0c;有一定的权限&#xff0c;无法从webshell上进行提权 目录 BypassUAC提权 原理 关于UAC MFS绕过提权 UAC等级为低绕过测试 UAC等级为中绕过测试 UAC等级为高绕过测试 注意&#xff1a;bypa…

【综述】视频无监督域自适应(VUDA)的小综述

【综述】视频无监督域自适应&#xff08;VUDA&#xff09;的小综述 一篇小综述&#xff0c;大家看个乐子就好&#xff0c;参考文献来自于一篇综述性论文 链接&#xff1a;https://arxiv.org/abs/2211.10412 这次基于三篇有代表性的文章来讲解 X. Song, S. Zhao, J. Yang, H.…

第十篇、基于Arduino uno,用LCD1602(不带IIC的)显示屏显示字符——结果导向

0、结果 说明&#xff1a;可以在LCD1602屏幕上面显示字符&#xff0c;实时的变量&#xff0c;如果是你想要的&#xff0c;可以接着往下看。 1、外观 说明&#xff1a;注意是不带IIC通讯的LCD屏幕&#xff0c;外形如下。 2、连线 说明&#xff1a;需要连接十几根线。 uno——…

#机器学习--深度学习中的优化

#机器学习--深度学习中的优化 引言1、神经网络优化中的挑战1.1、病态1.2、局部极小值1.3、高原、鞍点和其它平坦区域1.4、悬崖1.5、长期依赖、梯度消失与梯度爆炸1.6、非精确梯度1.7、局部和全局结构间的弱对应1.8、优化的理论限制 2、优化算法2.1、随机梯度下降&#xff08;SG…

macos wireshark 抓取https包

1、启动浏览器 1.1 创建空文件 $ touch /Users/zhujl/Downloads/https/mysslkey.log 2、设置wireshark tls属性&#xff0c;指定tls密钥存储文件 2.1 进入Wireshark Preferfences > Protocols > TLS 属性配置 2.2 勾选上Reassemable TLS records spanning multiple …

【网络编程】https协议——加密与窃密的攻防战

目录 一、https协议的介绍 二、加密和解密 1、加密和解密的过程 2、为什么需要加密和解密 3、常见的加密方式 3.1对称加密 3.2非对称加密 3.3数据摘要&#xff08;数据指纹&#xff09; 3.4数字签名 三、https加密解密的方式选择和中间人攻击的方式 1、只使用对称加…

JUC 高并发编程基础篇

JUC 高并发编程基础篇 • 1、什么是 JUC • 2、Lock 接口 • 3、线程间通信 • 4、集合的线程安全 • 5、多线程锁 • 6、Callable 接口 • 7、JUC 三大辅助类: CountDownLatch CyclicBarrier Semaphore • 8、读写锁: ReentrantReadWriteLock • 9、阻塞队列 • 10、ThreadPo…

Android12之MediaMetricsService服务(一百五十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

谷歌云 | 你需要知道的关于软件开发中的人工智能

【本文由 Cloud Ace 整理&#xff0c;Cloud Ace 是谷歌云全球战略合作伙伴&#xff0c;拥有 300 多名工程师&#xff0c;也是谷歌最高级别合作伙伴&#xff0c;多次获得 Google Cloud 合作伙伴奖。作为谷歌托管服务商&#xff0c;我们提供谷歌云、谷歌地图、谷歌办公套件、谷歌…

底层课程导学

目录 一、底层导学 1.课程回顾 2.嵌入式系统分层 3.Linux层次结构 二、ARM课该怎么学 1.课程内容 2.学习方法 三、计算机基础知识 1.计算机的进制 2.总线 四、ARM存储模型 1.三级存储结 五、CPU工作原理 1.CPU工作原理 2.指令的执行过程 3.地址空间 六、ARM体系结构 1.ARM处理器…

自动化测试实战项目(二)连连看外挂

自动化测试和做外挂的原理很相似&#xff0c;都是模拟用户的鼠标和键盘操作, 给自己的程序写自动化就是做测试&#xff0c;给别人的程序写自动化就是外挂了。 本文使用的技术也同样适用制作“对对碰”&#xff0c;"找茬" 之类游戏的外挂。 阅读目录 QQ连连看外挂实…

《面试1v1》垃圾回收机制

我是 javapub&#xff0c;一名 Markdown 程序员从&#x1f468;‍&#x1f4bb;&#xff0c;八股文种子选手。 面试官&#xff1a; 小伙子,跟我聊聊垃圾回收机制吧。什么是垃圾?怎么回收? 候选人&#xff1a; 好的面试官,来吧!垃圾就是那些不再被程序使用的对象。Java 通过…