简单说下用bitmapshader来实现切圆的效果

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上去查看

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 7.1 压缩图片 一、基础知识 1、图片的格式 jpg:最常见的图片格式。色彩还原度比较好,可以支持适当压缩后保持...
    AndroidMaster阅读 7,368评论 0 13
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,007评论 8 265
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,056评论 3 119
  • 秋风起,我穿着七分袖牛仔衬衣坐在办公室里吹着暖气,一开门一股寒流瞬间亲吻了全身,我打了个实实在在的冷颤,看了看长长...
    与凄阅读 1,643评论 0 0
  • 【圈规】西南交大人必看 来到校园圈你,算是找到组织啦!! 这里的每一个小伙伴都是在校的一员~~ 校园圈为生活在我们...
    173eff1342b1阅读 2,338评论 0 0

友情链接更多精彩内容