1. 程式人生 > >筆記—自定義View之DrawText文字繪製

筆記—自定義View之DrawText文字繪製

一 canvas 繪製文字的方式

1 drawText(String text, float x, float y, Paint paint)

2 drawTextRun() 它和 drawText() 一樣都是繪製文字,但加入了兩項額外的設定——上下文和文字方向

3 drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint ) 沿著一條 Path 來繪製文字 hOffset 和 vOffset 分別是 橫向和縱向 方向的 偏移量

4 StaticLayout 繪製多行文字

二 paint對文字繪製的輔助

1 設定文字顯示效果

1 Paint.setTextSize(float textSize) 設定文字大小

2 Paint.setTypeface(Typeface typeface) 設定文字字型

讀取資原始檔字型方法
paint.typeface = Typeface.createFromAsset(context.assets, "Satisfy-Regular.ttf");
canvas.drawText(text, 100f, 600f, paint)

3 Paint.setFakeBoldText(boolean user) 是否使用偽粗體

4 Paint.setStrikeThroughText(boolean strikeThruText) 是否新增刪除線

5 Paint.setUnderlineText(boolean underlineText) 是否新增下劃線

6 Paint.setTextSkewX(float skewX) 設定文字橫向錯切角度。其實就是文字傾斜度的啦。

7 Paint.setTextScaleX(float scaleX) 設定文字橫向縮放 也就是文字變胖變瘦

8 Paint.setLetterSpacing(float letterSpacing) 設定字元間距。預設值是 0。

9 Paint.setFontFeatureSettings(String settings) 用 CSS 的 font-feature-settings 的方式來設定文字

paint.setFontFeatureSettings("smcp"); // 設定 "small caps"
canvas.drawText("Hello HenCoder", 100, 150, paint);

10 Paint.setTextAlign(Paint.Align align) 設定文字對齊方式 一共有三個值:LEFT CENTER 和 RIGHT。預設值為 LEFT

11 Paint.setTextLocale(Locale locale) 設定文字繪製的地區 也就是大陸和臺灣 同一個字 有不同寫法

12 Paint.setHinting(int mode) 設定是否啟用字型的 hinting (字型微調)

1 測量文字尺寸類

1 Paint.getFontSpacing() 獲取推薦的行距 即推薦的兩行文字的 baseline 的距離

2 Paint.getFontMetrics() 獲取FontMetrics 一個相對專業的工具類 提供幾個文字排印方面的數值

 top/bottom  它們的作用是限制所有字形( glyph )的頂部和底部範圍
 ascent/descent  它們的作用是限制普通字元的頂部和底部範圍
 leading   指的是行的額外間距,即對於上下相鄰的兩行,上行的 bottom 線和下行的 top 線的距離
 baseline   它的作用是作為文字顯示的基準線

1 Paint.getFontSpacing() 獲取推薦的行距 即推薦的兩行文字的 baseline 的距離

3 Paint.getTextBounds(String text,int start,int end,Rect bounds) 獲取文字的實際 顯示範圍 引數裡 text 是要測量的文字,start 和 end 分別是文字的起始和結束位置,bounds 是儲存文字顯示範圍的物件,方法在測算完成之後會把結果寫進 bounds

4 Paint.measureText(String text)測量文字的實際佔用寬度並返回

val paint= Paint()
paint.textSize=48f
canvas.drawText("Hello HenCoder",100f,100f,paint)
val width=paint.measureText("Hello HenCoder")
canvas.drawLine(100f, 100f, 100f + width, 100f, paint)

5 Paint.getTextWidths(String text,float[] widths) 獲取每個字元的寬度 放入 陣列 widths中

6 Paint.breakText(String text, boolean measureForwards, float maxWidth, float[] measuredWidth) 這個方法也是用來測量文字寬度的。但和 measureText() 的區別是, breakText() 是在給出寬度上限的前提下測量文字的寬度。如果文字的寬度超出了上限,那麼在臨近超限的位置截斷文字。

7 游標相關

 1 Paint.getRunAdvance(CharSequence text, int start, int end, int contextStart, int contextEnd, boolean isRtl, int offset) 計算某個字元出 游標的座標的x值
 2 Paint.getOffsetForAdvance(CharSequence text, int start, int end, int contextStart, int contextEnd, boolean isRtl, float advance)
 給出一個位置的畫素值,計算出文字中最接近這個位置的字元偏移量(即第幾個字元最接近這個座標
 getOffsetForAdvance() 配合上 getRunAdvance() 一起使用,就可以實現「獲取使用者點選處的文字座標」的需求

8 Paint.hasGlyph(String string)檢查指定的字串中是否是一個單獨的字形 (glyph)。最簡單的情況是,string 只有一個字母(比如a)。

相關推薦

筆記定義ViewDrawText文字繪製

一 canvas 繪製文字的方式 1 drawText(String text, float x, float y, Paint paint) 2 drawTextRun() 它和 drawText() 一樣都是繪製文字,但加入了兩項額外的設定——上下文

定義ViewGradualView文字漸變-顏色漸變-影象漸變

話不多說上個動圖解釋框架的內容: 記得在筆者X菱電梯的時候,有個需求,大概就是電梯開門,讓一個白色的文字漸漸的變成藍色並且展開,大概的意思就電梯到了幾樓的意思。當時很苦惱,藍色——》白色中間要經歷怎樣的滄桑變化呢?後來跟我們當時的美工MM溝通了一下,她

Android定義View使用Path繪製手勢軌跡和水波效果

先看下效果圖: 繪製軌跡 繪製手指的軌跡主要是攔截View的onTouchEvent()方法,並根據手指的軌跡繪製path。path中有兩種可以實現的方法 1、Path.lineTo(x,y)方法 public class MoveP

android定義View學習3--文字繪製

介紹一大堆繪製文字相關的函式… 主要分canvas繪製文字、Paint輔助繪製文字、Paint測量文字相關值。 1. canvas繪製文字 1) drawText(String text, float x, float y, Paint paint

定義view實現文字不同顏色

效果圖 定義屬性 <declare-styleable name="ColorTrackTextView"> <attr name="originColor" format="color"/>

Android筆記--簡單的定義View繪控制元件

第一步:新建atts.xml檔案,自定義屬性,不引用系統的屬性,在構造器中使用安卓系統自帶的API的TypedArray類取出atts.xml中的自定義屬性使用(通過對映)。 第二步:新建一個類,繼承

Android 定義ViewView繪製流程(一)

View繪製流程網上已經有很多詳細介紹的文章,這裡權當給自己最近在這方面的學習的一個記錄,另外本文主要是記錄自己在實際程式碼的一些寫法,一來記錄基礎知識方便自己後面複習二來在開發中可以參考這段時間的程式碼記錄多作參考,一般遇到問題都會在網上找答案,如果自己多記錄參考自己的文章

Android進階——定義View擴充套件系統控制元件的另一種思路實現漸變文字動畫的TextView

引言 前面幾篇文章 繼承或組合系統現有控制元件實現新控制元件,擴充套件新功能都是在對應的構造方法中去擴充套件的,但千萬不要把思路侷限於只能在構造方法中去擴充套件,這篇就簡單地分享另一種思路,通過重寫對應的週期方法實現擴充套件。 一、View中幾種重

Android進階——定義ViewView繪製流程及實現onMeasure完全攻略

引言 Android實際專案開發中,自定義View不可或缺,而作為自定義View的一種重要實現方式——繼承View重繪尤其重要,前面很多文章基本總結了繼承View的基本流程:自定義屬性和繼承View重寫onDraw方法——>實現構造方法並完成相關初始化操

定義View繪圖篇(三):文字(Text)

順境也好,逆境也好,人生就是一場對種種困難無盡無休的鬥爭,一場以寡敵眾的戰鬥。——泰戈爾 相關文章: 一、文字 相關方法預覽: //普通設定 paint.setAntiAlias(true); //指定是否使用抗鋸齒功能 如果使用會使繪

【安卓筆記定義view組合控制元件

組合控制元件即將若干個系統已有的控制元件組合到一塊形成一個組合控制元件,比如帶返回按鈕的標題欄就是一個最簡單的組合控制元件。 使用組合控制元件的好處是提高程式碼的複用性,一處定義多處使用。 下面我們

定義ViewRect的使用與理解

此篇為我的第一篇部落格,藉此平臺讓更多的人知道和掌握更多android的知識,希望能越來越優秀.高手過招,不只是會用,更多的是理解它的原理,能舉一反三,與已知知識對比學習,方便記憶與理解,下面,我們直接進入正題.我的文章會有一個很明顯的特徵,就是中學時期老師所講的"3W"原則,what(是什麼),h

定義View指南針(反編譯別人的程式碼實現)

一、說明        偶爾點開魅族手機內建的工具箱應用,發現其指南針做的還不錯,就想模擬做一個類似的效果,在這裡我們不準備自己從頭開始編寫程式碼,而是採用一點黑科技,首先,我們從魅族系統中匯出工具箱應用的apk,然後反編譯apk,結合

Android定義View分貝儀

一、說明        最近在整理自定義View方面的知識,偶爾看到meizu工具箱的分貝儀效果,感覺它的實效效果還挺好的,遂想自己模擬實現練練手,廢話不多說,直接開擼。 二、效果圖 首先看一下效果圖: 看效果還挺炫酷

定義ViewonMeasure()方法

前言 一個View從建立到被繪製到螢幕上,需要完成measure(測量)、layout(佈置)、draw(繪製)三個步驟,分別對應View中的measure()、layout()、draw()三個方法。網上關於這三個方法的原始碼解析文章有很多,而且一般情況下也不會去重寫它們(measure()方

Android定義ViewCanvas

https://www.jianshu.com/p/fb18c28d6627 用繼承View的方式來自定義View,我們就需要重寫onDraw方法,也就是得咱自己來畫圖了。畫圖就得用到畫筆和畫布,也就是Paint和Canvas。我們來了解下Canvas。 Canvas Canvas我們可

Android 定義ViewCanvas詳解

自定義View的相關文章: Android 實現一個簡單的自定義View Android 自定義View步驟 Android Paint詳解 Android 自定義View之Canvas相關方法說明 Android 自定義View例項之 “京東跑”

Android : 定義View流式佈局

寫了一個很簡單的佈局 這是周圍圓框的drawable <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android">

android定義View仿通訊錄側邊欄滑動,實現A-Z字母檢索

我們的手機通訊錄一般都有這樣的效果,如下圖: OK,這種效果大家都見得多了,基本上所有的android手機通訊錄都有這樣的效果。那我們今天就來看看這個效果該怎麼實現。 一.概述 1.頁面功能分析 整體上來說,左邊是一個ListView,右邊是一個自定義View,但

Android筆記——定義TabLayouttitle與icon

自定義TabLayout 總佈局 實現的是底端TabLayout <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="htt