textview文字描边实现(代码片段)

zhangmiao14 zhangmiao14     2022-12-25     629

关键词:

TextView文字描边实现

需求描述

文字显示在图片的上面,图片的内容是不确定了,为了防止文字与图片的颜色相近导致用户看不到或者看不清文字的问题,所以显示文字描边,避免问题。

实现

实现思想

使用TextPaint绘制相同文字在TextView的底部,TextPaint的字显示要比原始的字大一些,这样看起来就像是有描边的文字。

代码

1.attrs.xml文件
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- 有描边的自定义TextView-->
    <declare-styleable name="StrokeTextView">
        <!--描边的颜色 -->
        <attr name="stroke_color" format="color" />
        <!-- 描边的宽度 -->
        <attr name="stroke_width" format="dimension" />
    </declare-styleable>

</resources>
2.StrokeTextView的实现
package com.zm.autostroketextview;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.annotation.Nullable;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.widget.TextView;

/**
 * 文字内容有描边的TextView
 * Author: zhangmiao
 * Date: 2018/4/13
 */
public class StrokeTextView extends TextView 

    private TextView outlineTextView = null;

    public StrokeTextView(Context context) 
        this(context, null);
    

    public StrokeTextView(Context context, @Nullable AttributeSet attrs) 
        this(context, attrs, 0);
    

    public StrokeTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) 
        super(context, attrs, defStyleAttr);
        outlineTextView = new TextView(context, attrs, defStyleAttr);
        init(attrs);
    

    private void init(AttributeSet attrs) 
        //1.获取参数
        TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.StrokeTextView);
        int stroke_color = ta.getColor(R.styleable.StrokeTextView_stroke_color, Color.WHITE);
        float stroke_width = ta.getDimension(R.styleable.StrokeTextView_stroke_width, 2);

        //2.初始化TextPaint
        TextPaint paint = outlineTextView.getPaint();
        paint.setStrokeWidth(stroke_width);
        paint.setStyle(Paint.Style.STROKE);
        outlineTextView.setTextColor(stroke_color);
        outlineTextView.setGravity(getGravity());
    

    @Override
    public void setLayoutParams(ViewGroup.LayoutParams params) 
        super.setLayoutParams(params);
        outlineTextView.setLayoutParams(params);
    

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        //设置轮廓文字
        CharSequence outlineText = outlineTextView.getText();

        if (outlineText == null || !outlineText.equals(getText())) 
            outlineTextView.setText(getText());
            postInvalidate();
        
        outlineTextView.measure(widthMeasureSpec, heightMeasureSpec);
    

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) 
        super.onLayout(changed, left, top, right, bottom);
        outlineTextView.layout(left, top, right, bottom);
    

    @Override
    protected void onDraw(Canvas canvas) 
        outlineTextView.draw(canvas);
        super.onDraw(canvas);
    

3.布局文件中StrokeTextView的使用
<?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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary">

    <com.zm.autostroketextview.StrokeTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:stroke_color="@android:color/white"
        app:stroke_width="2dp" />

</LinearLayout>
4.结果显示

技术分享图片

css实现文字描边效果(代码片段)

一、介绍最近在一个项目的宣传页中,设计师使用了文字描边效果,之前我确实没有实现过文字的描边效果,然后我在查阅资料后,知道了实现方法。文字描边分为两种:内外双描边和单外描边,也就是指... 查看详情

text-stroke实现文字描边(镂空)text-fill-color实现文字填充&渐变(+animation实现流光字体)(代码片段)

...text-stroke-color‘>(text-stroke-width:设置或检索对象中的文字的描边厚度、text-stroke-color:设置或检索对象中的文字的描边颜色)<h2id="demo">这是描了1像素的文字</h2>#democolor:#555;-web 查看详情

android自定义textview实现文字和图片居中显示(代码片段)

默认情况下,如果TextView的宽度超过文字的宽度,文字居中显示时,想要在文字的左边或者右边添加一个图片时,左边或者右边的文字就会默认以左边和右边开始排列,效果如下。如果想要让,文字和图片... 查看详情

css描边文字(代码片段)

查看详情

给textview设置文字渐变色(代码片段)

利用shader来实现viewBinding.title:这是一个textView上代码:viewBinding.title.post//设置字体渐变valshader=LinearGradient(0F,0F,0F,viewBinding.title.measuredHeight.toFloat(),ContextCompat.getColor(context 查看详情

Android中美丽的描边文字

...1:27【问题描述】:我知道如何使用自定义视图(EditText或TextView)来描边文本,但我无法实现像这样漂亮的东西,这是使用Photoshop完成的。是的,它也有外阴影。到目前为止,我所做的是调整笔触宽度和笔触连接样式。但是,如... 查看详情

android移动应用开发之textview实现阴影跑马灯文字效果(代码片段)

文章目录前言创建项目配置文件简介阴影走马灯文字values/string.xmlvalues/colors.xmllayout/activity_main.xml法2main/javalayout/activity_main.xml参考前言首先需要已经安装好了AndoridStudio并且配置好了虚拟手机并能够运行开机。创建项目创建一个pro... 查看详情

支持段落的textview(代码片段)

开始前前几天做了一个需求(首章漏出),要求对一段文字可以进行分段且可以设置它的段间距,行间距等属性,大致需要以下功能点实现思路基本的实现思路就是将每个文字进行排版布局,计算出当前文... 查看详情

修改textview中部分文本的字体及颜色(代码片段)

在Android应用开发中使用TextView控件展示一些文字内容时可能会遇到一些特别的需求,比如希望用特殊的字体或颜色标示出一段文字中的某些文字,一般开发者很容易想到用多个TextView控件把具有不同显示样式的文字拼接起... 查看详情

修改textview中部分文本的字体及颜色(代码片段)

在Android应用开发中使用TextView控件展示一些文字内容时可能会遇到一些特别的需求,比如希望用特殊的字体或颜色标示出一段文字中的某些文字,一般开发者很容易想到用多个TextView控件把具有不同显示样式的文字拼接起... 查看详情

android根据文字长度自动调整字号的textview(代码片段)

...长然后显示不完全。实现根据需求,很容易想到根据TextView的宽高和文字长度计算字号,然后重新设置TextView字号。/***@authorWastrel*@date创建时间:2016年8月19日上午9:12:01*TODO 查看详情

svg文字描边动画(代码片段)

...新美观任何不规则图形都可以由svg绘制完成,当然也包括文字,文字本身就可以看作一个不规则图形??还是按以前的流程,开始放代码前,先看效果:很酷炫有木有?!!!在我发现这个效果的时候,我觉得碉堡了,直到我知道... 查看详情

textview简单学习(代码片段)

TextView文字大小、颜色、显示不下、文字+icon实例<!--android:text设置Text要展示的文字android:textSize设置文字的大小android:textColor设置文字的颜色android:maxLines设置文字显示的行数android:ellipsize将显示不下的文字设置为...(省略号)and... 查看详情

textview简单学习(代码片段)

TextView文字大小、颜色、显示不下、文字+icon实例<!--android:text设置Text要展示的文字android:textSize设置文字的大小android:textColor设置文字的颜色android:maxLines设置文字显示的行数android:ellipsize将显示不下的文字设置为...(省略号)and... 查看详情

一分钟教你如何实现唯美的文字描边

前两天有一个原来的同事问我文字描边怎么做,那么今天我们就来说说文字描边这个样式怎么实现.一.文字描边-webkit-text-stroke文字描边参数:参数1描边大小参数2描边颜色   注意: webkit内核有效只能使用在谷歌,safir有... 查看详情

textview设置文字包含中英文时自动换行问题的终极解决方案(代码片段)

情景,正常TextView中设置文本内容中包含中英文时会造成自动换行的问题,影响界面显示效果,如图:网上很多解决途径,甚至有多三方框架处理,但是效果并不能达到,最终是要如下代码完美解决,效果图如下:具体实现过程... 查看详情

如何在android中实现textview中的文字逐一显示(代码片段)

1、在类中写入以下代码privateTextViewtextView4;publicstaticfinalintDISPLAY_TEXT=1;StringexplainText="这段文字会逐一显现";//这个是要显示的总文字StringdisplayExplainText="";//这个是会从小到全的显示的文字//handler在接收到me 查看详情

如何在android中实现textview中的文字逐一显示(代码片段)

1、在类中写入以下代码privateTextViewtextView4;publicstaticfinalintDISPLAY_TEXT=1;StringexplainText="这段文字会逐一显现";//这个是要显示的总文字StringdisplayExplainText="";//这个是会从小到全的显示的文字//handler在接收到me 查看详情