版權(quán)聲明:本文為博主原創(chuàng)文章救氯,未經(jīng)博主允許不得轉(zhuǎn)載。
在項(xiàng)目開發(fā)過程中歌憨,有許多需求讓我們頭大着憨,各種不懂的開發(fā)的產(chǎn)品經(jīng)理亂設(shè)計(jì)。需求是需要傾斜的务嫡,用特定的字體甲抖,還要帶描邊。上網(wǎng)了解了下相關(guān)資料后植袍,能夠靈活使用惧眠,滿足需求。在這里分享一個(gè)關(guān)于這樣的textview的開發(fā)于个。
第一步:下載好對應(yīng)的文字庫
我這里使用的是華文字體氛魁,所以網(wǎng)上下載個(gè)華文字體就好了。一般是這樣的
也有些后綴名是TTF厅篓,這個(gè)是一樣的秀存,不區(qū)分大小寫的。羽氮。
接下來或链,在assets文件夾下新建一個(gè)文件夾:fonts。注意名字不要建錯(cuò)了档押。然后就把.ttf文件放進(jìn)去就搞定了澳盐。
第二步:自定義個(gè)TextView
由于我們要用到傾斜,所以還是自定義一個(gè)TextView比較好令宿,而且這樣也方便使用叼耙,不然每個(gè)地方都要調(diào)用重復(fù)的方法多麻煩。
在寫自定義TextView前粒没,先了解下如何傾斜TextView筛婉,描邊以及如何使用字體。
1癞松、傾斜TextView:
這個(gè)是很簡單的爽撒,在自定義TextView中,onDraw方法中利用canvas.rotate()就可以了响蓉,然后用你的TextView對象把canvas硕勿,draw進(jìn)去就好。如下:
@Override
protected void onDraw(Canvas canvas)
{
//傾斜度45,上下左右居中
canvas.rotate(-7, getMeasuredWidth(), getMeasuredHeight());
outlineTextView.draw(canvas);
super.onDraw(canvas);
}
2厕妖、描邊字體:
這個(gè)主要是用了TextPaint的幾個(gè)屬性而已首尼,沒有什么難度挑庶。
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、做點(diǎn)設(shè)置就搞定了查排。也就幾個(gè)重載方法凳枝。
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);
// 設(shè)置輪廓文字
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);
}
這樣就全部搞定了。感覺是不是很簡單跋核。希望對大家有幫助岖瑰。
給個(gè)類吧還是,之前是用在自定義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);
// 設(shè)置輪廓文字
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);
}
}