博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TextView文字描边实现
阅读量:5972 次
发布时间:2019-06-19

本文共 2925 字,大约阅读时间需要 9 分钟。

TextView文字描边实现

需求描述

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

实现

实现思想

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

代码

1.attrs.xml文件
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的使用
4.结果显示

转载于:https://www.cnblogs.com/zhangmiao14/p/9538879.html

你可能感兴趣的文章
深入理解Android:Telephony原理剖析与最佳实践 发布
查看>>
写给iOS小白的MVVM教程(序)
查看>>
Hello2012,沉睡海洋博客新年展望
查看>>
linux内核启动内核解压过程分析
查看>>
Java的HashMap和HashTable
查看>>
Linux 版块官方系统下载
查看>>
MYSQL-命令:mysqlhotcopy
查看>>
SHELL-清空httpdlog
查看>>
3560的Qos配置实例
查看>>
Exchange 2013 功能部署系列四 升级CU1关键更新
查看>>
js中Math之random,round,ceil,floor的用法总结
查看>>
VMware vSphere 5.1 群集深入解析(十八)-DPM推荐向导&汇总
查看>>
vCloud Automation Center (vCAC) 6.0 (四)
查看>>
pyHook 示例代码
查看>>
Cisco ASA 5510 从inside访问dmz
查看>>
[php-gtk] JeCat PHP Toolbox
查看>>
Struts1.x系列教程(16):使用LocaleAction类实现国际化的Web程序
查看>>
mac android环境配置
查看>>
大型网站架构系列:消息队列(二)
查看>>
在Linux中什么是目录的执行权限?
查看>>