欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > Android 自定义TextView实现文字描边效果

Android 自定义TextView实现文字描边效果

2024/10/24 1:55:14 来源:https://blog.csdn.net/Roy1986613/article/details/142950216  浏览:    关键词:Android 自定义TextView实现文字描边效果

效果如下

自定义两个属性

//attrs.xml
<!-- 文本描边颜色 -->
<attr name="strokeTextColor" format="reference|color" />
<!-- 文本描边粗细 -->
<attr name="strokeTextWidth" format="reference|integer" />

实现类

public class StrokeTextView extends androidx.appcompat.widget.AppCompatTextView {private static final int[] STROKE_ATTRS = new int[]{R.attr.strokeTextColor, R.attr.strokeTextWidth};private @ColorInt int strokeColor = 0;private int strokeWidth = 3;public StrokeTextView(Context context) {this(context, null);}public StrokeTextView(Context context, @Nullable AttributeSet attrs) {this(context, attrs, android.R.attr.textViewStyle);}public StrokeTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);TypedArray typedArray = context.obtainStyledAttributes(attrs, STROKE_ATTRS, defStyleAttr, 0);strokeColor = typedArray.getColor(0, 0);strokeWidth = typedArray.getInt(1, 3);typedArray.recycle();}public void setStrokeColor(@ColorInt int color) {strokeColor = color;invalidate();}public void setStrokeWidth(int width) {strokeWidth = width;invalidate();}@Overrideprotected void onDraw(Canvas canvas) {TextPaint wkPaint = getLayout().getPaint();int preColor = wkPaint.getColor();Paint.Style prePaintStyle = wkPaint.getStyle();// apply stroke paintwkPaint.setColor(strokeColor);wkPaint.setStrokeWidth(strokeWidth);wkPaint.setStyle(Paint.Style.STROKE);// draw text outlinegetLayout().draw(canvas);// restore paintwkPaint.setColor(preColor);wkPaint.setStrokeWidth(0);wkPaint.setStyle(prePaintStyle);super.onDraw(canvas);}}

 在onDraw方法中,拿到负责绘制文本的Layout对象,对其Paint应用描边设置后绘制一遍,就是绘制的文字描边效果。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com