Android TextView字体描边
原文:链接地址
今天公司要求做一个字体描边功能,在网上搜到一个不错的,可以实现改变文字描边宽度和描边颜色,功能实现看下图
功能效果下面说具体实现
首先需要自定义一个TextView:StrokeTextView,代码如下:
public classStrokeTextViewextendsTextView{
privateTextViewoutlineTextView=null;
publicStrokeTextView(Contextcontext) {
super(context);
outlineTextView=newTextView(context);
init();
}
publicStrokeTextView(Contextcontext,AttributeSetattrs) {
super(context,attrs);
outlineTextView=newTextView(context,attrs);
init();
}
publicStrokeTextView(Contextcontext,AttributeSetattrs,intdefStyle) {
super(context,attrs,defStyle);
outlineTextView=newTextView(context,attrs,defStyle);
init();
}
public voidinit() {
TextPaintpaint=outlineTextView.getPaint();
paint.setStrokeWidth(2);//描边宽度
paint.setStyle(Paint.Style.STROKE);
outlineTextView.setTextColor(Color.parseColor("#ffffff"));//描边颜色
outlineTextView.setGravity(getGravity());
}
@Override
public voidsetLayoutParams(ViewGroup.LayoutParamsparams) {
super.setLayoutParams(params);
outlineTextView.setLayoutParams(params);
}
@Override
protected voidonMeasure(intwidthMeasureSpec,intheightMeasureSpec) {
super.onMeasure(widthMeasureSpec,heightMeasureSpec);
//设置轮廓文字
CharSequenceoutlineText=outlineTextView.getText();
if(outlineText==null|| !outlineText.equals(this.getText())) {
outlineTextView.setText(getText());
postInvalidate();
}
outlineTextView.measure(widthMeasureSpec,heightMeasureSpec);
}
@Override
protected voidonLayout(booleanchanged,intleft,inttop,intright,intbottom) {
super.onLayout(changed,left,top,right,bottom);
outlineTextView.layout(left,top,right,bottom);
}
@Override
protected voidonDraw(Canvascanvas) {
outlineTextView.draw(canvas);
super.onDraw(canvas);
}
}
在布局文件中调用,布局文件如下:
布局文件Java中调用代码如下:
private StrokeTextView test_stroketextview = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
test_stroketextview = (StrokeTextView)findViewById(R.id.test_stroketextview);
test_stroketextview.setText("测试文字描边");
}
如果想更改文字描边宽度,或者描边颜色,需要修改上面的StrokeTextView类,当然也可以把这个类设计的更灵活些,这样就可以动态的修改描边宽度或者描边颜色。
原文也给出了完整工程的链接地址,需要在CSDN下载库里消耗1个积分下载,我觉得没有必要,代码也就是上面的那些。
2017年了,今年也就要毕业了,希望自己可以积累更多的知识,这也算是我android学习路上的第一篇文章的,计划今年可以快速丰富自己的GitHub和博客。
CoderTung 的第 1 篇知识储备。