前言:

本来朋友问我镂空字体怎么实现,刚开始以为是简简单单调整背景色和透明度,后来发现是我想多了。记录一下

效果图:

看了几个整体思路都是

  • 自定义HolloTextView继承自View,重写onDraw方法,绘制背景,使用PorterDuff.Mode.DST_OUT的画笔调用canvas.drawText方法绘制文字

其实有些背景可以用别的方法实现:

透明背景可以用

binding.btMySignOut.setTextColor(Color.alpha(100));等等

alpha范围是0-250

第一步:

1、创建HollowTextView
public class HollowTextView extends AppCompatTextView {private Paint mTextPaint, mBackgroundPaint;private Bitmap mBackgroundBitmap, mTextBitmap;private Canvas mBackgroundCanvas, mTextCanvas;private RectF mBackgroundRect;private int mBackgroundColor;private float mCornerRadius;public HollowTextView(Context context) {this(context, null);}public HollowTextView(Context context, AttributeSet attrs) {super(context, attrs);initAttrs(attrs, 0);initPaint();}public HollowTextView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);initAttrs(attrs, defStyleAttr);initPaint();}private void initAttrs(AttributeSet attrs, int defStyleAttr) {if (attrs == null) {return;}TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.HollowTextView, defStyleAttr, 0);mBackgroundColor = typedArray.getColor(R.styleable.HollowTextView_hollowTextView_background_color, Color.TRANSPARENT);mCornerRadius = typedArray.getDimension(R.styleable.HollowTextView_hollowTextView_corner_radius, 0);typedArray.recycle();}/**** 初始化画笔属性*/private void initPaint() {//画文字的paintmTextPaint = new Paint();//这是镂空的关键mTextPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));mTextPaint.setAntiAlias(true);mBackgroundPaint = new Paint();mBackgroundPaint.setColor(mBackgroundColor);mBackgroundPaint.setAntiAlias(true);}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);mBackgroundBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_4444);mBackgroundCanvas = new Canvas(mBackgroundBitmap);mTextBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_4444);mTextCanvas = new Canvas(mTextBitmap);mBackgroundRect = new RectF(0, 0, getWidth(), getHeight());}@Overrideprotected void onDraw(Canvas canvas) {//这里给super传入的是mTextCanvas,把一些基本属性都支持进去super.onDraw(mTextCanvas);drawBackground(mBackgroundCanvas);int sc;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {sc = canvas.saveLayer(0, 0, getMeasuredWidth(), getMeasuredHeight(), null);} else {sc = canvas.saveLayer(0, 0, getMeasuredWidth(), getMeasuredHeight(), null, Canvas.ALL_SAVE_FLAG);}canvas.drawBitmap(mBackgroundBitmap, 0, 0, null);canvas.drawBitmap(mTextBitmap, 0, 0, mTextPaint);canvas.restoreToCount(sc);}private void drawBackground(Canvas canvas) {if (mCornerRadius > 0) {canvas.drawRoundRect(mBackgroundRect, mCornerRadius, mCornerRadius, mBackgroundPaint);} else {canvas.drawColor(mBackgroundColor);}}
}

第二步:创建values下styleable的xml(attrs)

<?xml version="1.0" encoding="utf-8"?>
<resources><declare-styleable name="HollowTextView"><attr name="hollowTextView_background_color" format="color|reference"/><attr name="hollowTextView_corner_radius" format="dimension|reference"/></declare-styleable>
</resources>

最后就是引用HollowTextView

<com.test.aaa.activitys.HollowTextViewandroid:id="@+id/hollowtext"android:layout_width="wrap_content"android:layout_height="50dp"android:gravity="center"android:text="镂空文本"android:textSize="30sp"android:layout_marginTop="230dp"android:layout_marginLeft="@dimen/dp_200"android:layout_marginRight="50dp"android:textStyle="bold"app:hollowTextView_background_color="#4CAF50"app:hollowTextView_corner_radius="5dp"/>

Android镂空字体,TextvView实现镂空字体效果相关推荐

  1. android让字体左右对齐,Android 模仿微信读书文字左右对齐效果

    原标题:Android 模仿微信读书文字左右对齐效果 本文作者 作者:Amter https://www.jianshu.com/p/020786e22a6f 左右对齐的文字效果,很常见,在大多数文章 ...

  2. android自带中文字体,Android更换系统默认显示的字体使用自定义字体

    序言 上一篇Android 自定义字体,更换系统默认显示的字体使用自定义字体有讲到怎样指定控件显示指定字体,怎样整个软件显示指定字体,怎样WebView加载指定字体,但是还留下一个怎样修改整个系统的默 ...

  3. android 设置Spinner文字标题颜色 字体大小样式

    原文地址为: android 设置Spinner文字标题颜色 字体大小样式 // 在初始化之前改变 Spinner文字标题颜色         mySpinner.xml 样式文件放在main.xml ...

  4. Android教程之如何使用自定义字体

    要在其他平台实现自定义字体可谓是相当的麻烦,但是在Android平台就很简单了. 首先将自定义字体放到"assets"下面被实例化之后再使用,字体文件如下图所示. 在程序中通过如下 ...

  5. TextView 字体(TypeFace) 交通灯Led效果

    本文来自 Android开发必知的50诀窍 hack11 1.1预期目标 1,学会给 TextView 设置不同字体 2,利用字体实现交通灯效果 1.2 TextView 设置字体样式 1.2.1 首 ...

  6. text——为android系统添加一种默认字体,类似“sans”,“serif”,“monospace”

    在android系统中,默认的中文字体只有一种:DroidSansFallback.ttf,如果想在android应用程序中随意设置想要的中文字体,除了在应用程序中通过assets目录引入字体文件外, ...

  7. Android 屏幕适配(修改系统字体大小、显示大小、修改分辨率相关适配)

    Android实际开发中会遇到各种各样的机型,所以就需要对多种机型进行适配.常见的适配在这类就不详细介绍了,大家可以参考这里的系列文章Android通用屏幕适配讲解的已经很详细了.下面说的是:当修改系 ...

  8. Android TextView中设定个别文字字体显示格式

    Android TextView中设定个别文字字体显示格式 文章分类:移动开发 用Html来格式化字符,例如要实现如下的显示: "这只是一个测试字符串,测试黑体字.斜体字.下划线.红色字的显示." 可 ...

  9. 给Android Studio设置代码字体大小与界面字体样式

    前言 使用android studio第一步肯定就是设置字体大小了,废话不多说,直接上教程: 初始界面: 更改后界面: 目录 更改代码字体大小 更改界面字体大小及样式 一.更改代码字体大小​ File ...

最新文章

  1. MongoDB update修改器: 针对Fields的$修改器 $inc $set $unset
  2. XCTF联赛“出海计划”开启,八月新加坡站国际赛蓄势待发
  3. 在 python中每个模块用什么来实现_Python代码模块热更新机制实现(reload)
  4. 产品需求文档的10步
  5. 罗斯文2007(Northwind 2007)数据库、Access 2007 样列数据库分析[转]
  6. Ubuntu+vscode打不开
  7. 牛客15666 又见斐波那契(矩阵快速幂)
  8. LeetCode-114: 二叉树展开为链表
  9. 邵阳市工业学校计算机29班,邵阳市南门口大祥区沙子坡文明路11号计算机学校...
  10. JDK5.0的11个主要新特征
  11. 从主机名谈Hadoop集群管理
  12. html5自动调用js函数,从html文件中的外部js文件调用Javascript函数
  13. 神舟战神换cpu教程_神舟战神能换什么cpu 神舟战神Z7可以换CPU吗
  14. winpe linux系统安装win7,WINPE+LINUX+DOS 完美者U盘维护系统V8.6 及安装方法
  15. 域远程管理计算机,远程控制局域网电脑 图解局域网怎么远程控制
  16. 我的地盘ol位置服务器拒绝怎么办,微信我的地盘ol等级划分详解 微信我的地盘ol等级怎么分...
  17. 零的突破!6所高校、2所“双非”顶刊发文
  18. 如何快速向oracle插入大量数据,以及注意事项
  19. 小米android手机密码忘了怎么解锁,小米5忘记了锁屏密码怎么办 小米5忘记锁屏密码的解决方法...
  20. WINDOWS系统服务详解

热门文章

  1. BitTorrent协议规范(二)
  2. 容联云收购诸葛智能 进一步构筑“通讯+数据+智能” 技术壁垒
  3. jQuery中的Ajax (六个Ajax的操作方法) 细解!!!
  4. FH30502输入3.7V升5V电流3A-5A同步整流升压芯片
  5. 华为的android文件夹在哪,安卓手机文件目录详解
  6. 中国联通智慧银行大数据解决方案.ppt
  7. Camera2 学习(一)概览
  8. “.plt“文件转png格式图片简写
  9. Redis持久化 RDB和AOF
  10. 软考中级软件设计师--10.操作系统