簡介
Android繪圖支持里面有有一個(gè)叫做
Shader
的東西,翻譯過來就是叫做著色器,渲染器.作用是用來實(shí)現(xiàn)一種漸變,渲染的效果,其實(shí)就是填充。
5種Shader
- BitmapShader //位圖
- LinearGradient //線性
- RadialGradient //光束
- SweepGradient //梯度
- ComposeGradient //混合
除了
BitmapShader
之外,其他的真的是產(chǎn)生漸變效果
而BitmapShader
則是生成一個(gè)圖像,類似于Photoshop的圖像填充,它的作用是通過Paint
對Canvas
進(jìn)行制定的Bitmap
填充
3種填充模式
- CLAMP //拉伸填充
- REPEAT //橫縱向重復(fù)填充
- MIRROR //橫向,縱向不斷翻轉(zhuǎn)
既然我們可以選擇
Bitmap
去作為圖像填充,那么我們可不可以實(shí)現(xiàn)這種圓形頭像的效果呢?
肯定是可以的,我們可以用Bitmap
去填充一個(gè)圓,在這篇文章的基礎(chǔ)上做修改
修改process函數(shù):
public void process(View v) {
Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.jpg);
BitmapShader mBitmapShader = new BitmapShader(mBitmap, TileMode.CLAMP, TileMode.CLAMP);
Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setShader(mBitmapShader);
Bitmap destBitmap = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(destBitmap);
/**
* 以上設(shè)置BitmapShader到Paint里
* 下面就是使用這個(gè)填充去畫一個(gè)圓
*/
canvas.drawCircle(mBitmap.getWidth() / 2, mBitmap.getHeight() / 2,
(Math.min(mBitmap.getWidth(), mBitmap.getHeight())) / 2, mPaint);
((ImageView)
findViewById(R.id.img)).setImageBitmap(destBitmap);
}
這是一個(gè)應(yīng)用
BitmapShader
的小例子,下面的其他幾個(gè)著色器就等大家動(dòng)手去做啦.也可以看看這個(gè)博客