• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Path

    標簽: AndroidStudio

    作用:

    可以利用一些基本的繪制函數,組合成復雜的圖形,保存到path變量里,之后再由canvas.drawPath(path, paint)來進行繪制。

    共有參數:
    Direction dir:
    路徑繪制的方向,有兩種:順時針 (CW clockwise) 和逆時針 (CCW counter-clockwise) 。對于普通情況,這個參數填 CW 還是填 CCW 沒有影響。它只是在需要填充圖形 (Paint.Style 為 FILL 或FILL_AND_STROKE) ,并且圖形出現自相交時,用于判斷填充范圍的。
    添加圓形
    path.addCircle(300, 300, 200, Path.Direction.CW);
    參數:
    x, y, radius 這三個參數是圓的基本信息,最后一個參數 dir 是畫圓的路徑的方向。
    示例:
    path.addCircle(300, 300, 200, Path.Direction.CW);
    canvas.drawPath(path, paint);
    解讀:
    X從0向右偏移300為X軸,Y從0向下偏移300為Y軸,X+Y軸=圓心的位置,200為圓的半徑,Path.Direction.CW是畫圓的路徑的方向。

    示例圖:

    添加橢圓
    path.addOval(50, 50, 350, 200, Path.Direction.CW);
    示例:
    path.addOval(50, 50, 350, 200, Path.Direction.CW);
    canvas.drawPath(path, paint);
    解讀:
    以XY(0,0)為起點,X從0向右偏移50為新起點,Y從0向下偏移50為新起點,X從0向右偏移350為終點,Y從0向下偏移200為終點,新起點和終點所得的區域,就是橢圓區域。
    

     示例圖:

    添加矩形
    path.addRect(100, 100, 500, 500, Path.Direction.CW);
    解讀:
    以XY(0,0)為起點,X從0向右偏移100為新起點,Y從0向下偏移100為新起點,X從0向右偏移500為終點,Y從0向下偏移500為終點,新起點和終點所得的區域,就是矩形區域。

     示例圖:

    添加圓角矩形
    path.addRoundRect(100,100,500,300,50,50, Path.Direction.CW);
    解讀:
    以XY(0,0)為起點,X從0向右偏移100為新起點,Y從0向下偏移100為新起點,X從0向右偏移500為終點,Y從0向下偏移300為終點,新起點和終點所得的區域,就是矩形區域,rx的50是圓角的橫向半徑,ry的50是圓角的縱向半徑。

     示例圖:

    畫線
    path.lineTo(100, 100);
    path.rLineTo(100, 0);
    示例:
    paint.setStyle(Paint.Style.STROKE);
    path.lineTo(100, 100);
    path.rLineTo(100, 0);
    path.lineTo(100, 200);
    canvas.drawPath(path, paint);
    解讀:
    lineTo(x,y) x,y的計算方式是絕對坐標(0,0開始計算),繪畫的起點是上一次繪制的結束坐標;
    rLineTo(x,y) x,y的計算方式是相對坐標(上一次繪制結束的xy開始計算),繪畫的起點是上一次繪制的結束坐標;
    path.lineTo(100, 100);
    以XY(0,0)開始計算XY,繪畫的起點為0,0(因為第一次畫,所以起始值是0,0),X從0向右偏移100點為X的終點,Y從0向下偏移100點為Y的終點,X的終點+Y的終點形成繪畫終點,從繪畫起點(0,0)到繪畫終點(100,100)就是繪制路徑,該方法所得的效果就是在起點和終點的端點上畫一條線。
    path.rLineTo(100, 0);
    以XY(100,100)開始計算XY,繪畫的起點為100,100(因為上一次繪制的結束坐標在100,100),X從100向右偏移100點為X的終點,Y從100向下偏移0點為Y的終點,X的終點+Y的終點形成繪畫的終點,從繪畫起點(100,100)到繪畫終點(200,100)就是繪制路徑,該方法所得的效果就是在起點和終點的端點上畫一條線。
    path.lineTo(100, 200);
    以XY(0,0)開始計算XY,繪畫的起點為200,100(因為上一次繪制的結束坐標在200,100),X從0向右偏移100點為X的終點,Y從0向下偏移200點為Y的終點,X的終點+Y的終點形成繪畫終點,從繪畫起點(200,100)到繪畫終點(100,200)就是繪制路徑,該方法所得的效果就是在起點和終點的端點上畫一條線。

     示例圖:

    移動繪畫的起始位置
    path.moveTo(200, 100);
    示例:
    paint.setStyle(Paint.Style.STROKE);
    path.lineTo(100, 100);
    path.moveTo(200, 100);
    path.lineTo(200, 0);
    canvas.drawPath(path, paint);
    解讀:
    先畫一條線,然后移動繪畫的起始位置到200,100(x,y的計算方式是絕對坐標0,0開始計算)再從繪畫起點(200,100)到繪畫終點(200,0)的起點和終點的端點上畫一條線。

    示例圖:

    在圓形的區域里畫弧形
    path.arcTo(100, 100, 300, 300, -90, 90, true);
    示例:
    paint.setStyle(Paint.Style.STROKE);
    path.lineTo(100, 100);
    path.arcTo(100, 100, 300, 300, -90, 90, true);
    canvas.drawPath(path, paint);
    解讀:
    先畫一條線,然后以XY(0,0)為起點,X從0向右偏移100為新起點,Y從0向下偏移100為新起點,X從0向右偏移300為終點,Y從0向下偏移300為終點,新起點和終點所得的區域,就是圓形區域,-90是起始繪畫位置(X軸從正右方向為0度,旋轉-90度的位置開始繪畫),90是繪畫的角度,true為強制移動到弧形起點(無痕跡)開始繪畫,false為一條直線連接到弧形起點(有痕跡)再開始繪畫。
    多種寫法:
    path.addArc(100, 100, 300, 300, -90, 90);
    解讀:
    只是一個直接使用了 forceMoveTo = true 的簡化版 arcTo()

     示例圖:

    閉環
    path.close();
    示例:
    paint.setStyle(Style.STROKE);
    path.moveTo(100, 100);
    path.lineTo(200, 100);
    path.lineTo(150, 150);
    path.close(); 
    解讀:
    先把起始繪畫點移動到100,100,然后X從0向右偏移200點為X的終點,Y從0向下偏移100點為Y的終點,X的終點+Y的終點形成繪畫終點,從繪畫起點(100,100)到繪畫終點(200,100)畫一條線;然后X從0向右偏移150點為X的終點,Y從0向下偏移150點為Y的終點,X的終點+Y的終點形成繪畫終點,從上次繪畫結束的位置到繪畫終點(150,150)畫一條線;調用close形成閉環(從當前繪畫終點150,150到繪畫起點100,100繪制一條直線)。

     示例圖:

    添加另一個 Path
    path.addPath(Path path);
    版權聲明:本文為a1003434346原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/a1003434346/article/details/108300582

    智能推薦

    Android Path詳解

    概念 路徑,可用于繪制直線,曲線構成的幾何路徑,還可用于根據路徑繪制文字。 常用API 移動 連線 閉合 添加圖形 使用 移動連線閉合的使用 新建一個類在 onDraw()方法中使用 所示代碼運行之后會產生如下效果 1 去掉 會顯示空的 2 去掉后 3 從坐標上可以看出 mPath.lineTo(140, 800)的x,y坐標減去 mPath.moveTo(100, 70); 就為mPath.rL...

    set_include_path()

    1.include.php文件   (PATH_SEPARATOR為路徑分隔符) 這樣我們可以方便直接用文件名來引入文件 目的:在框架中方便加載文件   參考當下文件目錄  ...

    For XML Path

    上For XML Path要使用  創建的表數據如圖: 先看下for xml path的初始使用方法:select ClassID,Sex,Age,Name from #PersonInfo for xml path('PersonInfo')   從名字就看能夠看出使用方法。for xml  !!! 在使用過程中感覺一般是惡group by 一起用的。舉比...

    LeetCode------Path Sum

    求二叉樹的路徑需要用深度優先算法DFS的思想來遍歷每一條完整的路徑,也就是利用遞歸不停找子節點的左右子節點,而調用遞歸函數的參數只有當前節點和sum值。首先,如果輸入的是一個空節點,則直接返回false,如果如果輸入的只有一個根節點,則比較當前根節點的值和參數sum值是否相同,若相同,返回true,否則false。 這個條件也是遞歸的終止條件。下面我們就要開始遞歸了,由于函數的返回值是Ture/F...

    Clip-path

    瀏覽器會裁剪掉裁剪區域以外的區域,不僅是背景及其它類似的內容,也包括 border、text-shadow 等。瀏覽器不會捕獲元素裁剪區域以外的 hover、click 等事件。 IE瀏覽器不支持,且低版本webkit內核瀏覽器需要添加-webkit-前綴。具體的瀏覽器兼容性請戳:Can I Use 語法 clip-path: <clip-source> | [ <basic-s...

    猜你喜歡

    nodejs-fs、path

    path路徑const path = require(‘path’); path.basename(‘C:\\temp\\myfile.html’); 在POSIX上返回’C:\\temp\\myfile.html’,而在windows返回’myfile.html’; 要想強制返回某一個系統上的風格時:...

    path的鍋?

    用Python進行國際化編碼的兄弟對這個錯誤大抵應該是不陌生的——“UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)”。根據業內“公認”的鄙視鏈,恭喜老鐵們,大家應該都穩穩的占...

    path元素(2)

    path元素(2) path元素用于確定一條路徑,需要配合相應的指令才能使用 M/m指令與L/l指令 M/m相當于canvas中的moveTo,L/l指令相當于canvas中的lineTo M/L是依照絕對坐標確定點,m/l是依照相對坐標確定點 要使用stroke才能將路徑展現出來 H/h指令與V/v指令 H/h表示水平方向移到某個x處,V/v表示垂直方向上移到某個y處 H/V是依照絕對坐標確定點...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    精品国产乱码久久久久久蜜桃不卡