自定義View相關(guān)學(xué)習(xí)(一) (SlantedTextView ,canvas)

學(xué)習(xí)控件SlantedTextView

SlantedTextView 一個(gè)可以設(shè)置各個(gè)角落橫幅的文本視圖,繼承的View 不是TextView
  1. 構(gòu)造 ,調(diào)用了init(attrs)
  2. init(attrs)方法中初始化
    • 取出各種自定義屬性
    • 創(chuàng)建Paint畫(huà)筆,背景的畫(huà)筆mPaint 和文本的畫(huà)筆mTextPaint
  3. 最關(guān)鍵的一點(diǎn)重寫(xiě)onDraw()方法,在重寫(xiě)的onDraw方法里做了兩件事
    1. drawBackground(canvas)//繪制背景
    2. drawText(canvas)//繪制文字

重寫(xiě)的onDarw方法里做點(diǎn)什么

drawBackground(canvas)//繪制背景

  1. 創(chuàng)建了一個(gè)Path對(duì)象
  2. 根據(jù)設(shè)置的模式,繪制Path的路徑
  3. canvas 對(duì)象使用path 繪制

這里使用canvas.save() 保存了狀態(tài) ,save()restore() 看最后

drawText(canvas)//繪制文字

private void drawText(Canvas canvas) {
  int w = (int) (canvas.getWidth() - mSlantedLength / 2);//獲得畫(huà)布寬度減去橫幅寬度的二分之一
  int h = (int) (canvas.getHeight() - mSlantedLength / 2);
  float[] xy = calculateXY(canvas,w, h);        //根據(jù)w,h 算出五個(gè)坐標(biāo)點(diǎn)
  float toX = xy[0];        //文字的起始位置x坐標(biāo)
  float toY = xy[1];        //文字的起始位置y坐標(biāo)
  float centerX = xy[2];    //x旋轉(zhuǎn)中心
  float centerY = xy[3];    //y旋轉(zhuǎn)中心
  float angle = xy[4];  //旋轉(zhuǎn)的角度

  canvas.rotate(angle, centerX , centerY );//旋轉(zhuǎn)相應(yīng)的角度

  canvas.drawText(mSlantedText, toX, toY, mTextPaint); //繪制文字,toX和toY分別是文字的起始位置
}
//canvasd的rotate方法指定目標(biāo)點(diǎn)旋轉(zhuǎn)
public final void rotate(float degrees, float px, float py) {
  translate(px, py);  //1.移動(dòng)到目標(biāo)位置
  rotate(degrees);  //2.旋轉(zhuǎn)
  translate(-px, -py);//3.返回原來(lái)的位置
}

canvas學(xué)習(xí)

  1. drawText()的時(shí)候文字是出現(xiàn)在起始坐標(biāo)點(diǎn)的右上方,而且文字并不是全部顯示在y軸之上的
    y軸上方占有80%,下方占有剩余的20%。
    Screenshot_1497337934_PxCook.png
  1. canvas.rotate()畫(huà)布旋轉(zhuǎn)之后會(huì)對(duì)之后所繪制的內(nèi)容產(chǎn)生影響

    同理,以下這些方法也是影響的之后的繪制內(nèi)容(也就是改變之后的canvas狀態(tài)):

    • rotate

    • scale

    • translate

    • skew

    • concat

    • clipPath

  2. save()restore()

    save()只是save() 了當(dāng)前這個(gè)canvas() 的狀態(tài),和已經(jīng)畫(huà)出來(lái)的圖形無(wú)關(guān),restore()就是取出最近一次save()canvas()的狀態(tài),仍然不影響圖形。

    android繪圖canvas的sava、restore、rotate以及若干問(wèn)題,canvas繪圖的理解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容