Android镂空字体,TextvView实现镂空字体效果

news/2024/9/29 20:33:32/

前言:

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

效果图:

 看了几个整体思路都是

  • 自定义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"/>


http://www.ppmy.cn/news/526925.html

相关文章

【小插件】文字镂空“LSP”制作空心文字CAD

CAD自带功能制作空心字教程 实用技巧--CAD制作空心文字【中级】 输入多行文字设置字体样式最好粗点的 加载程序LSP 输入命令AP 选择“字体镂空LSP”&#xff0c;点击加载确定 功能具体使用 输入命令TEX 选择要编辑的字体内容 确定文字出现方向翻转 重复执行命令得到文字线条 空…

[VB.NET]空心字体

空心字体 实例说明 在本实例中&#xff0c;我们将制作一个能够显示空心字的应用程序。程序运行结果如图91-1所示。 <script type"text/javascript"> </script> <script type"text/javascript" src"http://pagead2.googlesyndicatio…

向设计师推荐20款漂亮的免费英文空心字体

设计师们都备有丰富的常用英文字体库&#xff0c;在设计的时候能够得心应手。今天这篇文章收集了20款精美的免费英文空心字体。这些精美的英文空心字体特别适合网页设计师&#xff0c;平面设计师和电脑艺术人员。如果你正在寻找漂亮的免费常用英文空心字体&#xff0c;那么这份…

css 日语字体,css字体

在css中,我们常通过font-family设定文本字体,且通过font-size, color, font-weight,text-decoration等设置字体的属性。 font-family: 指包含一组有共同特征的字体。共有五个字体系列:sans-serif, serif, monospace, cursive, fantasy. serif: 指的是有衬线的字体,一般用于…

php中空心字体怎么打,php打印一个边长为N的实心和空心菱型的方法

本文实例讲述了php打印一个边长为N的实心和空心菱型的方法。分享给大家供大家参考。具体分析如下&#xff1a; 实心菱型计算方法&#xff1a; $n&#xff1a;边长 $i&#xff1a;当前行,0开始 $rows&#xff1a;总行数 上部 前面空格数$n-$i-1 字符数$i*21 下部 前面空格数$i-$…

在图片中如何生成带有文字边缘空心字体?

简 介&#xff1a; 带有边缘的空心字体被广泛使用在各类视频的字母显示中&#xff0c;本文给出了一种简单的通过字体震动显示的方式产生空心字体的方法。这种方法可以在原来任何字体都生成相对应的空心字体。 关键词&#xff1a; 空心字体&#xff0c;字幕 #mermaid-svg-YrFvQk…

空心文字HTML,HTML5绘制空心的文本

HTML5绘制空心的文本 1、设计源码HTML5绘制空心的文本 /** * 绘制空心的文本 */ function drawHollowText() { //找到元素 var canvas document.getElementById("canvas"); //创建context对象 var ctx canvas.getContext("2d"); //设置字样和字体大小 ct…

java中font字体_【Java学习】Font字体类的用法介绍

一、Font类简介 Font类是用于设置图形用户界面上的字体样式的&#xff0c;包括字体类型(例如宋体、仿宋、Times New Roman等)、字体风格(例如斜体字、加粗等)、以及字号大小。 二、Font类的引用声明 Font类位于java.awt包中&#xff0c;使用时需要在代码顶端声明import java.aw…