> 软件编程 > 安卓开发 >
Android倾斜、描边、自定义字体的TextView 2017-02-21 14:20 出处:清屏网 人气:
在项目开发过程中,有许多需求让我们头大,各种不懂的开发的产品经理乱设计。需求是需要倾斜的,用特定的字体,还要带描边。上网了解了下相关资料后,能够灵活使用,满足需求。在这里分享一个关于这样的textview的开发。
第一步:下载好对应的文字库我这里使用的是华文字体,所以网上下载个华文字体就好了。一般是这样的
Paste_Image.png
也有些后缀名是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:
{ private TextView outlineTextView = null; private Context mContext; { super(context); mContext = context; outlineTextView = new TextView(context); init(); } { super(context, attrs); mContext = context; outlineTextView = new TextView(context, attrs); init(); } defStyle) { super(context, attrs, defStyle); mContext = context; outlineTextView = new TextView(context, attrs, defStyle); 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()); } { super.setLayoutParams(params); outlineTextView.setLayoutParams(params); } 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); } changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); outlineTextView.layout(left, top, right, bottom); } { //倾斜度45,上下左右居中 canvas.rotate(-7, getMeasuredWidth(), getMeasuredHeight()); outlineTextView.draw(canvas); super.onDraw(canvas); } }分享给小伙伴们:
本文标签: TextView,Android/">TextView,Android
相关文章
发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。
本类最热新闻