1.首先创建一个bitmapshader对象,当然它的重载分别有三个,不清楚的童鞋可以简单的看下此文章
简单介绍bitmapShader
Bitmap mBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.xxx);
mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.MIRROR, Shader.TileMode.MIRROR);
mPaint.setShader(mBitmapShader);
当知道了bitmapShader后,我们新建一个mBitmapShader,然后从裁剪圆角起
简单来说就是在ondraw方法新建一个圆角的rect然后用着色器也就是bitmapshader把具体的图片着色上去,就完成了切圆角的工作
canvas.drawRoundRect(mRoundRect, mBorderRadius, mBorderRadius,mBitmapPaint);
此时的mBitmapPaint肯定是蘸有这个着色器的画笔,然后关键的mRoundRect具体参数是多少呢?
众所周知,imageview的大小和下载的图片的大小是不一样的,想象一下,比如绘制到屏幕上的view的大小是300 * 400 px,然而图片的大小是100*200 px ,那我要完整的让这个图片显示是否要把原图放大呢,方法成300 * 600px的大小才能把这个view完全显示,当然图片可能显示不全
scale = Math.max(getWidth() * 1.0f / bitmap.getWidth(), getHeight() * 1.0f / bitmap.getHeight());
当算出具体的缩放比例时我们需要做的就是利用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的位置是不动的,改变的只是着色器里填充的位置。所以应该是像左平移50px
多余的代码就不贴了,可以去github上去查看