如何在Android中利用滑翔实现一个图片圆角功能

  介绍

如何在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中利用滑翔实现一个图片圆角功能