Android 自定義TextView

網上有很多自定義TextView,我這裏只是記一下自己寫這個的體會,做一個簡單的TextView。

首先,我在values文件夾下新建一個attrs文件,並在裏面創建要自定義TextView的屬性

<resources>
    <declare-styleable name="MyTextView">
        <attr name="textColor" format="color"/>
        <attr name="textSize" format="dimension"/>
        <attr name="text" format="string"/>
        <attr name="maxLength" format="integer"/>
    </declare-styleable>
</resources>

  對上面代碼這裏簡單說兩句,name="MyTextView" ,最好TextView的類名,便於區分,裏面的format的取值可以去百度一下,都很簡單。

上面的代碼也很簡單,也有少部分註釋,我提幾個重點:

  1、獲取資源文件後一定要回收

2、測量view大小,

測量view大小有三種模式:EXACTLY、AT_MOST、UNSPECIFIED,每個模式代表不同的意思,不明白的可以百度

這裏AT_MOST是測量wrap_content,這裏還有一個工具Rect,他的作用是幫我獲取到文字的大小,因爲測量文字的寬高與文字的長度和大小有關,當然還有padding,具體想了解Rect的可以參考:Rect

3、繪製onDraw

  首先canvas.drawText(mText,getPaddingLeft(),y,mPaint); 第一個參數是文字本身,第二個參數是繪製的起點,第三個參數是基線,第四個參數是畫筆,這裏比較不好搞懂的是第三個基線,下面盜了一張圖

  基線就是Baseline,我們要得到他的位置(我的理解相當於座標),這種圖要注意,Height是在TOP和BOTTOM之間(個人理解),而Height一半是中線(是中間線),那麼中線到基線BaseLine應該還有一段距離dy,我們能很容易得到中線,所以要求dy,

我們可以通過Paint.FontMetricsInt 來得到Bottom和Top,注意這裏的Bottom是正值(假設爲5),Top是負值(假設爲-10),我們要求Bottom與top的寬度所以是Bottom-top,得到了他的寬度的一半再減bottom就能得到dy,然後再加上高度的一半就能得到基線的位置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章