介绍
如何在Android中利用滑翔实现一个图片圆角功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
<强>一、简介:强>
介绍两种使用BitmapTransformation来实现滑翔加载圆形图片和圆角图片的方法.Glide并不能直接支持轮图片,需要使用BitmapTransformation来进行处理。
<强>二、网上的实现方式强>
这里介绍下网上常见的方式和使用RoundedBitmapDrawable两种方法,本质上是差不多的:
- <李>使用画布和颜料来绘制李> <李>使用Android.support.v4.graphics.drawable。李RoundedBitmapDrawable >
实现圆形图片:
/* * * *滑翔圆形图片变换 */公开课GlideCircleTransform延伸BitmapTransformation { 公共GlideCircleTransform(上下文语境){ 超级(上下文); } @Override 保护位图变换(BitmapPool池、位图对于int outWidth, int outHeight) { 对于返回circleCrop(池); } 私有静态位图circleCrop (BitmapPool池,位图源){ 如果返回null(源==null); int大?Math.min (source.getWidth (), source.getHeight ()); int x=(source.getWidth()——大小)/2; int y=(source.getHeight()——大小)/2; 位图的平方=位图。createBitmap(来源,x, y,尺寸、大小); 位图的结果=池。(尺寸、大小Bitmap.Config.ARGB_8888); 如果(结果==null) { 结果=位图。createBitmap(大小、尺寸、Bitmap.Config.ARGB_8888); } 帆布画布=新画布(结果); 涂漆=new (); 油漆。setShader(新BitmapShader(平方,BitmapShader.TileMode。夹,BitmapShader.TileMode.CLAMP)); paint.setAntiAlias(真正的); 浮动r=大?2 f; 画布。drawCircle (r, r, r、油漆); 返回结果; } @Override 公共字符串getId () { 返回getClass () . getname (); } }
实现圆角图片:
/* * *滑翔圆角变换 */公开课GlideRoundTransform延伸BitmapTransformation { 私有静态浮动半径=0 f;/* * *构造函数默认圆角半径4 dp * * @param上下文语境 */公共GlideRoundTransform(上下文语境){ 这(上下文,4); }/* * *构造函数 * * @param上下文语境 * @param dp圆角半径 */公共GlideRoundTransform(上下文语境,int dp) { 超级(上下文); .getDisplayMetrics半径=Resources.getSystem () () .density * dp; } @Override 保护位图变换(BitmapPool池、位图对于int outWidth, int outHeight) { 对于返回roundCrop(池); } 私有静态位图roundCrop (BitmapPool池,位图源){ 如果返回null(源==null); 位图的结果=pool.get (source.getWidth (), source.getHeight (), Bitmap.Config.ARGB_8888); 如果(结果==null) { 结果=Bitmap.createBitmap (source.getWidth (), source.getHeight (), Bitmap.Config.ARGB_8888); } 帆布画布=新画布(结果); 涂漆=new (); 油漆。BitmapShader.TileMode setShader(新BitmapShader(源。夹,BitmapShader.TileMode.CLAMP)); paint.setAntiAlias(真正的); RectF RectF=new RectF (0 f, f, source.getWidth (), source.getHeight ()); 画布。drawRoundRect (rectF,半径,半径、油漆); 返回结果; } @Override 公共字符串getId () { 返回getClass () . getname () + Math.round(半径); } }
<强>三,笔者比较喜欢的简便的实现方式强>
//加载圆角图片 公共静态孔隙loadRoundImage(最后的上下文语境,字符串url,最终ImageView ImageView) { Glide.with(上下文) .load (url) .asBitmap () .placeholder(占位符) . error(占位符) .diskCacheStrategy (DiskCacheStrategy.ALL)//设置缓存 .into(新BitmapImageViewTarget (imageView) { @Override 保护无效setResource(位图资源){ super.setResource(资源); RoundedBitmapDrawable circularBitmapDrawable=RoundedBitmapDrawableFactory.create (context.getResources()、资源); circularBitmapDrawable.setCornerRadius (10);//设置圆角弧度 imageView.setImageDrawable (circularBitmapDrawable); } }); }//加载圆形图片 公共静态孔隙loadCirclePic(最后的上下文语境,字符串url,最终ImageView ImageView) { Glide.with(上下文) .load (url) .asBitmap () .placeholder(占位符) . error(占位符) .diskCacheStrategy (DiskCacheStrategy.ALL)//设置缓存 .into(新BitmapImageViewTarget (imageView) { @Override 保护无效setResource(位图资源){ RoundedBitmapDrawable circularBitmapDrawable=RoundedBitmapDrawableFactory.create (context.getResources()、资源); circularBitmapDrawable.setCircular(真正的); imageView.setImageDrawable (circularBitmapDrawable); } }); }如何在Android中利用滑翔实现一个图片圆角功能