自定義View 之 Path應用

2021-07-31 02:25:12 字數 1740 閱讀 6377

因為專案需要需要做幾個自定義view,用到了path,所以在結束後,總結分享下。
先看看效果吧。

大概就是乙個防太陽運轉的乙個自定義view,還有乙個是不規則曲線的進度條。

原理

sunprogressbar 找乙個中心點畫乙個半圓,然後再建立乙個矩形的path路徑,使用path的op()方法,

然後用剛剛的半圓路徑限制矩形路徑,動態的繪製矩形大小,取共集,就做出了這個效果了。

@requiresapi(api = build.version_codes.kitkat)

@override

protected void ondraw(canvas canvas)

//繪製中間填充的粉紅色的部分

@requiresapi(api = build.version_codes.kitkat)

private void drawfilter(canvas canvas)

lineprogress 給出一系列的不規則點,然後繪製一條灰色的貝塞爾曲線作為背景,然後再用pathmeasure 擷取背景path的部分長度,繪製進度條,隨著進度的不斷變化,然後擷取的長度也在變化,就做出了乙個動畫

@requiresapi(api = build.version_codes.kitkat)

@override

protected

void

ondraw(canvas canvas)

@requiresapi(api = build.version_codes.kitkat)

private

void

drawline(canvas canvas)

if (i == mpoint_h.length - 1)

line2.lineto(endx, endy);

path.cubicto(p3.x, p3.y, p4.x, p4.y, endx, endy);

}canvas.drawpath(path, mbgpaint);

path dst = new path(); // 建立用於儲存擷取後內容的 path

pathmeasure measure = new pathmeasure(path, false);

float stopd = measure.getlength() * mprogress;

float pos = new

float[2];

float tan = new

float[2];

measure.getpostan(stopd, pos, tan);

measure.getsegment(0, stopd, dst, true);

canvas.drawpath(dst, mprogresspaint);

canvas.drawcircle(pos[0], pos[1], mlinewidth * 2, mprogresspaint);

}

自定義View(四) path

在path中的布林運算有兩個方法 boolean op path path,path.op op boolean op path path1,path path2,path.op op 兩個方法中的返回值用於判斷布林運算是否成功,它們使用方法如下 對 path1 和 path2 執行布林運算,運算方...

自定義view之自定義屬性

1.首先在res的values檔案下新建乙個名為attrs.xml檔案 在該xml檔案中編寫我們需要的屬性 declare styleable後面的name必須要與接下來要自定義的view名一致。attr 後面的name表示需要自定義的屬性,format表示這些屬性的型別 2.新建乙個類繼承text...

Android自定義控制項之自定義View 二

效果如下圖 1 自定義ringview繼承view新增其構造方法並建立畫筆 public class ringview extends view protected boolean isrunning false public ringview context context public ring...