android 實現圓角imageview

2021-10-10 01:48:18 字數 4193 閱讀 7425

clip無法實現抗鋸齒,建議把clippath改為使用xfermode!!

實現原理,通過裁切canvas來控制繪製效果,canvas有drawroundrect可以直接繪製圓角矩形,但是沒有直接裁切圓角矩形的方法。如果想這麼做,就需要通過path來裁切canvas了

讓自己的類繼承自imageview,宣告例項變數

private

int round=

10,width,height;

//width可以在onlayout方法中通過getwidth()方法獲取,height同理

private

path path;

//記得在構造方法中對path進行初始化,不要將初始化放在draw方法,draw會重複呼叫,如果在這個方法中建立物件,容易頻繁觸發記憶體**,導致卡頓

@override

protected

void

ondraw

(canvas canvas)

//原 canvas.

clippath

(path)

;//現

paint.

setxfermode

(null

) canvas.

drawpath

(path,paint)

;//在xfermode為宣告的類變數,盡量不要在ondraw方法中例項化新物件

//private final porterduffxfermode xfermode=new porterduffxfermode(porterduff.mode.src_in)

paint.

setxfermode

(xfermode)

super

.ondraw

(canvas)

;

通過path的quadto方法,可以很輕鬆的實現圓角,如果沒有接觸過這個方法,很可能對這個方法的引數不好理解,這邊簡單解釋一下。

quadto

(float x1,

float y1,

float x2,

float y2)

方法需要傳入四個浮點型,其實為兩個點的座標,第乙個點(x1,y1),第二個點(x2,y2),第二個點比較好理解,就是path在呼叫這個方法後,最後到達(x2,y2)的位置,第乙個點為控制點

再解釋第乙個點的作用前,先看一下很好理解的lineto方法,**很簡單,就是從(50,50)的位置開始,先到(250,50),再到(250,250)

現在再呼叫一下quadto方法,把直角的這個點(250,50)作為控制點

這樣對比的話,控制點就比較好理解了,正常情況下,兩條線本來需要相交的點,即為控制點

除此之外,還可以通過path的addroundrect來生成圓角矩陣,這個方法需要傳入乙個矩陣、x軸與y軸生成橢圓角的半徑、繪製方向。

circleractima**iew.class

import

android.content.

context

;import

android.graphics.

bitmap

;import

android.graphics.

canvas

;import

android.graphics.

paint

;import

android.graphics.

path

;import

android.graphics.

porterduff

;import

android.graphics.

porterduffxfermode

;import

android.graphics.

rect

;import

android.graphics.

rectf

;import

android.util.

attributeset

;public

class

circleractima**iew

extends

public

circleractima**iew

(context context,

attributeset attrs)

public

circleractima**iew

(context context,

attributeset attrs,

int defstyle)

private

void

init()

public

intgetround()

public

void

setround

(int round)

@override

protected

void

ondraw

(canvas canvas)

@override

protected

void

onlayout

(boolean changed,

int left,

int top,

int right,

int bottom)

private

void

buildpath()

path.

moveto

(round,0)

; path.

lineto

(width-round,0)

; path.

quadto

(width,

0,width,round)

; path.

lineto

(width,height-round)

; path.

quadto

(width,height,width-round,height)

; path.

lineto

(round,height)

; path.

quadto(0

,height,

0,height-round)

; path.

lineto(0

,round)

; path.

quadto(0

,0,round,0);}}

預設的圓角是15px,不需要更改的話,直接當作imageview使用就可以,如果需要修改,呼叫setround(int round)方法,設定後會自動呼叫invalidate()重繪,無需手動重新整理。

android實現邊框圓角

1.在drawable 下新建 shape.xml 檔案 xml android radius為角的弧度,值越大角越圓。我們還可以把四個角設定成不同的角度,方法為 2.1設定成0dp無效,2.1以上版本可以,如果無效的話那就只能設成1dp了。2.設定引用 android background dra...

Android實現圓角邊框

設定邊框圓角可以在drawable mdpi目錄裡定義乙個xml 000000 10dp android toprightradius 10dp android bottomrightradius 10dp android bottomleftradius 10dp 解釋 solid的表示填充顏色,...

Android實現圓角邊框

設定邊框圓角可以在drawable mdpi目錄裡定義乙個xml 解釋 solid的表示填充顏色,為了簡單,這裡用的是黑色。而corners則是表示圓角,注意的是這裡bottomrightradius是左下角而不是右下角,bottomleftradius右下角。當然上面的效果也可以像下面一樣設定,如...