概述

实现镂空字体用到的知识点是PorterDuffXfermode,它的作用是可以决定多个图像叠加时的显示模式。关于PorterDuffXfermode的一些说明可以参考下这篇文章:
android画图之paint之setXfermode

实现

废话不多说,先上效果图:


实现方式也很简单,直接通过自定义控件继承TextView改造下TextView的Ondraw方法,代码不过十几行,超级简单,拿来即用。我直接贴下代码,看注释就可以明白:

public class HollowTextView extends AppCompatTextView {private Paint mPaint;private PorterDuffXfermode mPorterDuffXfermode;public HollowTextView(Context context) {this(context,null);}public HollowTextView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);mPaint.setColor(Color.WHITE);mPorterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.CLEAR );//使用DST_OUT和XOR模式也可以实现镂空字体//mPorterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.DST_OUT);//mPorterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.XOR);}@Overrideprotected void onDraw(Canvas canvas) {//需要在新的图层上绘制,绘制完后再再叠加到旧的图层上。canvas.saveLayer(0,0,canvas.getWidth(),canvas.getHeight(), null, Canvas.ALL_SAVE_FLAG);canvas.drawRect(0,0,canvas.getWidth(),canvas.getHeight(),mPaint);getPaint().setXfermode(mPorterDuffXfermode);super.onDraw(canvas);canvas.restore();}
}

后语

简单即高效,看到网上有的其他实现方式是通过绘制两张bitmap,一张绘制背景,一张绘制文字然后再组合来实现的,这种方式既复杂又低效(占用内存高)。当然我也提供了这种实现方式的代码,链接如下:

HollowTextViewV2

android超简单方式实现镂空字体TextView相关推荐

  1. android 夜间模式代码,Android 超简单的夜间模式如何实现?

    原标题:Android 超简单的夜间模式如何实现? 本文作者 作者: 唐子玄 实现夜间模式有很多种方式,经过多次尝试,算是找到了一种性价比较高的方式. 1 主题方式 这是最正统的方式,但工作量巨大,因 ...

  2. C# Winfrom Excel表格导出 Aspose.Cells超简单方式

    C# Winfrom Excel表格导出 Aspose.Cells超简单方式 首先需要下载 Aspose.Cells.dll,Aspose.Slides.dll,Aspose.Words.dll 这三 ...

  3. Android——超简单悬浮窗使用教程

    完全自定义悬浮窗,保证100%学会的超简单悬浮窗 先看看效果图: 图1                                                 图2               ...

  4. EasyPay(易支付)Android超简单微信支付宝支付接入

    今天我们来看看一个超简单集成微信和支付宝的支付框架EasyPay(易支付), 初学者都能一看就会一写就对的集成支付的方法. 首先还是先上gitHub链接 GitHub - kingofglory/Ea ...

  5. Android超简单底部导航ImageView+TextView+FramLayout(一)

    废话前言 刚工作的时候就事采用这种方式实现的底部导航,方便快捷,重要的是好理解. 我将采用我觉得最清晰的思路实现这种方式 一.创建主页面 为了便于查看,我只写了两个tab,其他多的照葫芦画瓢就行了 & ...

  6. 超简单修改富文本字体样式

    最近一直使用React 做项目,之前有个简单的需求:新闻详情页面,设置大.中.小三种字体,可以动态调整. 我一听很简单啊,动态设置新闻详情 的容器div的样式就好了. 大概是这样的- ​//三种字体类 ...

  7. Android 超简单音乐播放器(九)搜索网络歌曲,获得热门榜单(GridView)(易源api的使用)(JSON的解析)(刷新)

    首先感谢易源API! 提供了QQ音乐的接口~ 咳咳... 明天要写文档..看来..哎..我的歌词要等假期了? 回归正题~ 首先上一下我的界面啊实现啊啥的~ 点击榜单会出现对应的歌曲~ 可以搜索网络歌曲 ...

  8. Android超简单集成融云IM单聊

    最近项目中需要集成即时通讯,于是就选择了融云,按照步骤一步一步来还是很简单的,我做的只是单聊,(可支持发送文字.表情.图片.语音)下面记录一下 先上图 步骤: 一,去融云官网注册账号然后创建应用,应用 ...

  9. Android——超简单 MVC、MVP、MVVM入门系列

    2022年,新年第一篇文章,本篇文章将用非常简单的言语来描述各框架,尽量让大家一看即会. 前言: 相信不少伙伴在进行Android开发的时候,肯定遇见过 Activity 代码上千行的,这种代码非常难 ...

最新文章

  1. Mybatis传多个参数(三种解决方案)
  2. String是一个很普通的类 - Java那些事儿
  3. 查看php-fpm 占用内存情况
  4. pyspark union代码示例
  5. .NET 6 数组拷贝性能对比
  6. ASP.NET Core SameSite 设置引起 Cookie 在 QQ 浏览器中不起作用
  7. sgm3157功能_SGM3157_SGM3157供应商_价格_Datasheet_pdf资料-IC资料网
  8. 用python内置函数算复杂度吗_Python减少代码量的两个内置函数
  9. C++Primer Plus第6版C Primer Plus第6版 中文版免费分享啦
  10. 来自一个用户的体验-Alpha项目测试
  11. 绝版经典《Linux与UNIX Shell编程指南》中文文字PDF版
  12. 18.3 通过打印来调试
  13. wince 德赛187a__艾默生CT M8x0-03200066A
  14. 在Mac上修改jupyter默认地址
  15. (译)计算距离、方位和更多经纬度之间的点
  16. Win8.1开始菜单Classic Shell 4.0上手
  17. java 读取浏览器_JAVA读取文件流,设置浏览器下载或直接预览操作
  18. 柳 to 杨 (转)
  19. 计算机休眠后无法唤醒出现蓝屏,电脑休眠后无法唤醒怎么办【解决方法】
  20. 深度学习-根据名字识别男女

热门文章

  1. 浏览器上的Cookies有什么用?超级浏览器防关联如何实现?
  2. 网龙教育业务实现规模化变现 覆盖版图持续扩大
  3. 策略路由中traffic-policy
  4. 人工神经网络教程第四版,人工神经网络教程视频
  5. 从生活习惯到肠道微生物,揭秘胃肠道癌症的成因
  6. 浅谈数据分析、大数据分析和大数据开发的区别
  7. ESP80266WiFi通信模块连接51单片机实现双向通信
  8. 深度学习(四)-前馈神经网络
  9. SER 语音情感识别-论文笔记1
  10. mysql数据库的事务 acid 隔离级别 脏读 脏写 幻读 不可重复读