圓角圖片繪制
之前有一篇文章一篇文章繪制圓角圖片村生,用的是Xfermode的PorterDuff.Mode.SRC_IN來實現(xiàn)的惊暴,最近發(fā)現(xiàn)還有一種新的方式用來繪制:BitmapShader
什么是BitmapShader
BitmapShader是Shader的子類,可以通過Paint.setShader(Shader shader)進行設(shè)置趁桃、
這里我們只關(guān)注BitmapShader辽话,構(gòu)造方法:
mBitmapShader = new BitmapShader(bitmap, TileMode.CLAMP, TileMode.CLAMP);
參數(shù)1:bitmap
參數(shù)2肄鸽,參數(shù)3:TileMode;
TileMode的取值有三種:
CLAMP 拉伸
REPEAT 重復(fù)
MIRROR 鏡像
如果大家給電腦屏幕設(shè)置屏保的時候油啤,如果圖片太小典徘,可以選擇重復(fù)、拉伸益咬、鏡像逮诲;
重復(fù):就是橫向、縱向不斷重復(fù)這個bitmap
鏡像:橫向不斷翻轉(zhuǎn)重復(fù)础废,縱向不斷翻轉(zhuǎn)重復(fù)汛骂;
拉伸:這個和電腦屏保的模式應(yīng)該有些不同,這個拉伸的是圖片最后的那一個像素评腺;橫向的最后一個橫行像素帘瞭,不斷的重復(fù),縱項的那一列像素蒿讥,不斷的重復(fù)蝶念;
現(xiàn)在大概明白了,BitmapShader通過設(shè)置給mPaint芋绸,然后用這個mPaint繪圖時媒殉,就會根據(jù)你設(shè)置的TileMode,對繪制區(qū)域進行著色摔敛。
這里需要注意一點:就是BitmapShader是從你的畫布的左上角開始繪制的廷蓉,不在view的右下角繪制個正方形,它不會在你正方形的左上角開始马昙。
總結(jié):BitmapShader其實就是一個著色器桃犬,通過設(shè)置paint.setShader(BitmapShader),給畫筆上色,
只不過行楞,這個上色的是你所畫的圖片,最后在根據(jù)你需要形成的圖片大小和原來的圖片大小對比攒暇,算出縮放比例,
再根據(jù)比例畫一個你所需的集合圖形子房,用上剛剛畫好的paint就行了
canvas.drawCircle(mRadius, mRadius, mRadius, mBitmapPaint);