首页 > 代码库 > 文字描边--效果
文字描边--效果
package com.bn.ex12d;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint.Style;import android.text.TextPaint;import android.util.AttributeSet;import android.view.ViewGroup;import android.widget.TextView;/* * StrokeTextView的目标是给文字描边 * 实现方法是两个TextView叠加,只有描边的TextView为底,实体TextView叠加在上面 * 看上去文字就有个不同颜色的边框了 */public class StrokeTextView extends TextView { private TextView borderText = null;///用于描边的TextView public StrokeTextView(Context context) { super(context); borderText = new TextView(context); init(); } public StrokeTextView(Context context, AttributeSet attrs) { super(context, attrs); borderText = new TextView(context,attrs); init(); } public StrokeTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); borderText = new TextView(context,attrs,defStyle); init(); } public void init(){ TextPaint tp1 = borderText.getPaint(); tp1.setStrokeWidth(18); //设置描边宽度 tp1.setStyle(Style.STROKE); //对文字只描边 borderText.setTextColor(getResources().getColor(R.color.colorSeleter17)); //设置描边颜色 borderText.setGravity(getGravity()); } @Override public void setLayoutParams (ViewGroup.LayoutParams params){ super.setLayoutParams(params); borderText.setLayoutParams(params); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { CharSequence tt = borderText.getText(); //两个TextView上的文字必须一致 if(tt== null || !tt.equals(this.getText())){ borderText.setText(getText()); this.postInvalidate(); } super.onMeasure(widthMeasureSpec, heightMeasureSpec); borderText.measure(widthMeasureSpec, heightMeasureSpec); } protected void onLayout (boolean changed, int left, int top, int right, int bottom){ super.onLayout(changed, left, top, right, bottom); borderText.layout(left, top, right, bottom); } @Override protected void onDraw(Canvas canvas) { borderText.draw(canvas); super.onDraw(canvas); } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。