1.首先創(chuàng)建一個bitmapshader對象,當(dāng)然它的重載分別有三個,不清楚的童鞋可以簡單的看下此文章
簡單介紹bitmapShader
Bitmap mBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.xxx);
mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.MIRROR, Shader.TileMode.MIRROR);
mPaint.setShader(mBitmapShader);
當(dāng)知道了bitmapShader后,我們新建一個mBitmapShader,然后從裁剪圓角起
簡單來說就是在ondraw方法新建一個圓角的rect然后用著色器也就是bitmapshader把具體的圖片著色上去,就完成了切圓角的工作
canvas.drawRoundRect(mRoundRect, mBorderRadius, mBorderRadius,mBitmapPaint);
此時的mBitmapPaint肯定是蘸有這個著色器的畫筆,然后關(guān)鍵的mRoundRect具體參數(shù)是多少呢?
眾所周知,imageview的大小和下載的圖片的大小是不一樣的,想象一下,比如繪制到屏幕上的view的大小是300 * 400 px,然而圖片的大小是100*200 px ,那我要完整的讓這個圖片顯示是否要把原圖放大呢,方法成300 * 600px的大小才能把這個view完全顯示,當(dāng)然圖片可能顯示不全
scale = Math.max(getWidth() * 1.0f / bitmap.getWidth(), getHeight() * 1.0f / bitmap.getHeight());
當(dāng)算出具體的縮放比例時我們需要做的就是利用Matrix進行縮放了
mMatrix.setScale(scale, scale);
mBitmapShader.setLocalMatrix(mMatrix);
mBitmapPaint.setShader(mBitmapShader);
簡單來說就是把著色器的圖片放大了三倍,然后蘸到了畫筆上由此大公搞成了,大家可以去試下。
那如何讓圖片居中顯示呢,就像imageview里的centercrop效果呢
比如圖片的大小是200 * 200 px ,view的大小是100 *200 px
那如何讓 view居中顯示呢
if (dwidth * vheight > vwidth * dheight)
{
scale = (float) vheight / (float) dheight;
dx = (vwidth - dwidth * scale) * 0.5f;
}
else
{
scale = (float) vwidth / (float) dwidth;
dy = (vheight - dheight * scale) * 0.5f;
}
很明顯就是讓你的著色器的圖片去平移50px這里的話,rect的位置是不動的,改變的只是著色器里填充的位置。所以應(yīng)該是像左平移50px
多余的代碼就不貼了,可以去github上去查看