版权声明:本文为博主原创文章,未经博主允许不得转载。
在项目开发过程中,有许多需求让我们头大,各种不懂的开发的产品经理乱设计。需求是需要倾斜的,用特定的字体,还要带描边。上网了解了下相关资料后,能够灵活使用,满足需求。在这里分享一个关于这样的textview的开发。
第一步:下载好对应的文字库
我这里使用的是华文字体,所以网上下载个华文字体就好了。一般是这样的
也有些后缀名是TTF,这个是一样的,不区分大小写的。。
接下来,在assets文件夹下新建一个文件夹:fonts。注意名字不要建错了。然后就把.ttf文件放进去就搞定了。
第二步:自定义个TextView
由于我们要用到倾斜,所以还是自定义一个TextView比较好,而且这样也方便使用,不然每个地方都要调用重复的方法多麻烦。
在写自定义TextView前,先了解下如何倾斜TextView,描边以及如何使用字体。
1、倾斜TextView:
这个是很简单的,在自定义TextView中,onDraw方法中利用canvas.rotate()就可以了,然后用你的TextView对象把canvas,draw进去就好。如下:
@Override
protected void onDraw(Canvas canvas)
{
//倾斜度45,上下左右居中
canvas.rotate(-7, getMeasuredWidth(), getMeasuredHeight());
outlineTextView.draw(canvas);
super.onDraw(canvas);
}
2、描边字体:
这个主要是用了TextPaint的几个属性而已,没有什么难度。
TextPaint paint = outlineTextView.getPaint();
paint.setStrokeWidth(15);// 描边宽度
paint.setStyle(Paint.Style.STROKE);
outlineTextView.setTextColor(Color.parseColor("#6ec520"));// 描边颜色
outlineTextView:自定义TextView对象
3、使用字体库。
AssetManager mgr = mContext.getAssets();
Typeface tf = Typeface.createFromAsset(mgr, "fonts/huawen.ttf");
DialogRateTextView title = (DialogRateTextView) layout.findViewById(R.id.dialog_title);
title.setTypeface(tf);
这样就搞定了。
4、做点设置就搞定了。也就几个重载方法。
a. @Override
public void setLayoutParams (ViewGroup.LayoutParams params)
{
super.setLayoutParams(params);
outlineTextView.setLayoutParams(params);
}
b. @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
// 设置轮廓文字
CharSequence outlineText = outlineTextView.getText();
if (outlineText == null || !outlineText.equals(this.getText()))
{
outlineTextView.setText(getText());
postInvalidate();
}
outlineTextView.measure(widthMeasureSpec, heightMeasureSpec);
}
c.@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);
}
这样就全部搞定了。感觉是不是很简单。希望对大家有帮助。
给个类吧还是,之前是用在自定义dialog上的,之前po上来,懒得改名字了。
DialogRateTextView.java:
public class DialogRateTextView extends TextView
{
private TextView outlineTextView = null;
private Context mContext;
public DialogRateTextView(Context context)
{
super(context);
mContext = context;
outlineTextView = new TextView(context);
init();
}
public DialogRateTextView(Context context, AttributeSet attrs)
{
super(context, attrs);
mContext = context;
outlineTextView = new TextView(context, attrs);
init();
}
public DialogRateTextView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
mContext = context;
outlineTextView = new TextView(context, attrs, defStyle);
init();
}
public void init()
{
TextPaint paint = outlineTextView.getPaint();
paint.setStrokeWidth(15);// 描边宽度
paint.setStyle(Paint.Style.STROKE);
Typeface customFont = Typeface.createFromAsset(mContext.getAssets(), "fonts/huawen.ttf");
outlineTextView.setTypeface(customFont);
outlineTextView.setTextColor(Color.parseColor("#6ec520"));// 描边颜色
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(this.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)
{
//倾斜度45,上下左右居中
canvas.rotate(-7, getMeasuredWidth(), getMeasuredHeight());
outlineTextView.draw(canvas);
super.onDraw(canvas);
}
}