Android TextView字体描边

2017-02-08  本文已影响832人  cccccccxxxxxx

原文:链接地址

今天公司要求做一个字体描边功能,在网上搜到一个不错的,可以实现改变文字描边宽度和描边颜色,功能实现看下图

功能效果

下面说具体实现


首先需要自定义一个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 篇知识储备。

上一篇下一篇

猜你喜欢

热点阅读