android超简单方式实现镂空字体TextView
概述
实现镂空字体用到的知识点是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相关推荐
- android 夜间模式代码,Android 超简单的夜间模式如何实现?
原标题:Android 超简单的夜间模式如何实现? 本文作者 作者: 唐子玄 实现夜间模式有很多种方式,经过多次尝试,算是找到了一种性价比较高的方式. 1 主题方式 这是最正统的方式,但工作量巨大,因 ...
- C# Winfrom Excel表格导出 Aspose.Cells超简单方式
C# Winfrom Excel表格导出 Aspose.Cells超简单方式 首先需要下载 Aspose.Cells.dll,Aspose.Slides.dll,Aspose.Words.dll 这三 ...
- Android——超简单悬浮窗使用教程
完全自定义悬浮窗,保证100%学会的超简单悬浮窗 先看看效果图: 图1 图2 ...
- EasyPay(易支付)Android超简单微信支付宝支付接入
今天我们来看看一个超简单集成微信和支付宝的支付框架EasyPay(易支付), 初学者都能一看就会一写就对的集成支付的方法. 首先还是先上gitHub链接 GitHub - kingofglory/Ea ...
- Android超简单底部导航ImageView+TextView+FramLayout(一)
废话前言 刚工作的时候就事采用这种方式实现的底部导航,方便快捷,重要的是好理解. 我将采用我觉得最清晰的思路实现这种方式 一.创建主页面 为了便于查看,我只写了两个tab,其他多的照葫芦画瓢就行了 & ...
- 超简单修改富文本字体样式
最近一直使用React 做项目,之前有个简单的需求:新闻详情页面,设置大.中.小三种字体,可以动态调整. 我一听很简单啊,动态设置新闻详情 的容器div的样式就好了. 大概是这样的- //三种字体类 ...
- Android 超简单音乐播放器(九)搜索网络歌曲,获得热门榜单(GridView)(易源api的使用)(JSON的解析)(刷新)
首先感谢易源API! 提供了QQ音乐的接口~ 咳咳... 明天要写文档..看来..哎..我的歌词要等假期了? 回归正题~ 首先上一下我的界面啊实现啊啥的~ 点击榜单会出现对应的歌曲~ 可以搜索网络歌曲 ...
- Android超简单集成融云IM单聊
最近项目中需要集成即时通讯,于是就选择了融云,按照步骤一步一步来还是很简单的,我做的只是单聊,(可支持发送文字.表情.图片.语音)下面记录一下 先上图 步骤: 一,去融云官网注册账号然后创建应用,应用 ...
- Android——超简单 MVC、MVP、MVVM入门系列
2022年,新年第一篇文章,本篇文章将用非常简单的言语来描述各框架,尽量让大家一看即会. 前言: 相信不少伙伴在进行Android开发的时候,肯定遇见过 Activity 代码上千行的,这种代码非常难 ...
最新文章
- Mybatis传多个参数(三种解决方案)
- String是一个很普通的类 - Java那些事儿
- 查看php-fpm 占用内存情况
- pyspark union代码示例
- .NET 6 数组拷贝性能对比
- ASP.NET Core SameSite 设置引起 Cookie 在 QQ 浏览器中不起作用
- sgm3157功能_SGM3157_SGM3157供应商_价格_Datasheet_pdf资料-IC资料网
- 用python内置函数算复杂度吗_Python减少代码量的两个内置函数
- C++Primer Plus第6版C Primer Plus第6版 中文版免费分享啦
- 来自一个用户的体验-Alpha项目测试
- 绝版经典《Linux与UNIX Shell编程指南》中文文字PDF版
- 18.3 通过打印来调试
- wince 德赛187a__艾默生CT M8x0-03200066A
- 在Mac上修改jupyter默认地址
- (译)计算距离、方位和更多经纬度之间的点
- Win8.1开始菜单Classic Shell 4.0上手
- java 读取浏览器_JAVA读取文件流,设置浏览器下载或直接预览操作
- 柳 to 杨 (转)
- 计算机休眠后无法唤醒出现蓝屏,电脑休眠后无法唤醒怎么办【解决方法】
- 深度学习-根据名字识别男女