Android 傾斜、描邊而昨、自定義字體的TextView

版權(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è)華文字體就好了。一般是這樣的


Paste_Image.png

也有些后綴名是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);
    }
   }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末刻伊,一起剝皮案震驚了整個(gè)濱河市露戒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捶箱,老刑警劉巖智什,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異丁屎,居然都是意外死亡荠锭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門晨川,熙熙樓的掌柜王于貴愁眉苦臉地迎上來证九,“玉大人,你說我怎么就攤上這事共虑「幔” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵看蚜,是天一觀的道長。 經(jīng)常有香客問我赔桌,道長供炎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任疾党,我火速辦了婚禮音诫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘雪位。我一直安慰自己竭钝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著香罐,像睡著了一般卧波。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上庇茫,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天港粱,我揣著相機(jī)與錄音,去河邊找鬼旦签。 笑死查坪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宁炫。 我是一名探鬼主播偿曙,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼羔巢!你這毒婦竟也來了望忆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤朵纷,失蹤者是張志新(化名)和其女友劉穎炭臭,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體袍辞,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鞋仍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搅吁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片威创。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖谎懦,靈堂內(nèi)的尸體忽然破棺而出肚豺,到底是詐尸還是另有隱情,我是刑警寧澤界拦,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布吸申,位于F島的核電站,受9級特大地震影響享甸,放射性物質(zhì)發(fā)生泄漏截碴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一蛉威、第九天 我趴在偏房一處隱蔽的房頂上張望日丹。 院中可真熱鬧,春花似錦蚯嫌、人聲如沸哲虾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽束凑。三九已至晒旅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間湘今,已是汗流浹背敢朱。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摩瞎,地道東北人拴签。 一個(gè)月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像旗们,于是被迫代替她去往敵國和親蚓哩。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一上渴、Android開發(fā)初體驗(yàn) 二岸梨、Android與MVC設(shè)計(jì)模式模型對象存儲著應(yīng)用的數(shù)據(jù)和業(yè)務(wù)邏輯。模型類通常用來...
    為夢想戰(zhàn)斗閱讀 880評論 0 3
  • View的繼承關(guān)系 Android中所有控件,都是View或View的子類,比如開發(fā)中最常寫的代碼 findVie...
    四月一號閱讀 702評論 1 3
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程稠氮,因...
    小菜c閱讀 6,365評論 0 17
  • #開早會(huì)# 274曹阔、白人夫婦生下了一對雙胞胎。長得一模一樣隔披,不同的是一個(gè)是黑人赃份,一個(gè)是白人。 275奢米、客觀抓韩,您好!...
    62dc958fa705閱讀 174評論 0 2
  • 雨瀟瀟地下 猶如你在我心上鬓长,靜靜柔軟 樹悄悄晃動(dòng) 猶如眷念雨滴的絲絲情意 石道蜿蜒盤旋 桂花香氣四溢 小傘吱悠 腳...
    葉潔瑩sweet閱讀 133評論 0 0