Android设置图片圆角的方法

  

Android中经常会遇到对图片进行二次处理,例如加圆角,或者显示圆形图片

  

实现的效果图:

  

 Android设置图片圆角的方法

  

<强>方法一:

  

通过第三方框架滑翔实现图片显示有圆角,有三种写法如下:

  

1.1,第一种实现:

        RequestOptions选项=new RequestOptions () . error (R.drawable.img_load_failure)。bitmapTransform(新RoundedCorners(30));//图片圆角为30   Glide.with(这).load (URL)//图片地址   苹果(选项)   .into (ImagView);      

1.2,第二种实现:

        RequestOptions RequestOptions=new RequestOptions ();   requestOptions.placeholder (R.drawable.ic_launcher_background);   requestOptions.circleCropTransform ();   requestOptions。变换(新RoundedCorners (30));   Glide.with(这).load (URL)//图片地址   苹果(选项)   .into (ImagView);      

1.3,第三种实现:

        .centerCrop RequestOptions选项=new RequestOptions () () .transform(新RoundTransform (30),);   Glide.with(这).load (URL)//图片地址   苹果(选项)   .into (ImagView);            公开课RoundTransform延伸BitmapTransformation {   私有静态浮动半径=0 f;   公共RoundTransform(上下文语境){   这(上下文,4);   }      公共RoundTransform(上下文语境,int dp) {   超级(上下文);   这一点。.getDisplayMetrics半径=Resources.getSystem () () .density * dp;   }      @Override   保护位图变换(BitmapPool池、位图对于int outWidth, int outHeight) {   位图的位图=TransformationUtils。centerCrop(池、对于outWidth 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,半径,半径、油漆);   返回结果;   }      公共字符串getId () {   返回getClass () . getname () + Math.round(半径);   }      @Override   公共空间updateDiskCacheKey (MessageDigest MessageDigest) {      }   }      

<强>方法二:

  

自定义ImageView:

        & lt; ImageView   android: id=癅 + id/iv”   android: layout_width=" 300 dp”   android: layout_height=" 300 dp”   android: layout_centerHorizontal=" true "/在            第四ImageView=findViewById (R.id.iv);   位图的位图=BitmapFactory.decodeResource (getresource (), R.drawable.fengjing);   位图outBitmap=getRoundBitmapByShader(3)位图,500300年,20日;   iv.setImageBitmap (outBitmap);            公开课RoundRectImageView延伸ImageView {      私人油漆涂料;      公共RoundRectImageView(上下文语境){   这(上下文,null);   }      公共RoundRectImageView(上下文语境,AttributeSet attrs) {   这(上下文、attrs 0);   }      公共RoundRectImageView(上下文语境、AttributeSet attrs int defStyle) {   超级(上下文、attrs defStyle);   涂=new ();   }/* *   *绘制圆角矩形图片   * @author caizhiming   */@Override   保护空白>/* *   *通过BitmapShader实现圆形边框   * @param位图   * @param outWidth输出的图片宽度   * @param outHeight输出的图片高度   * @param半径圆角大小   * @param边界边框宽度   */公共静态位图getRoundBitmapByShader (int, int outHeight位图的位图,int outWidth半径,int寄宿生){   如果(位图==null) {   返回null;   }   int高度=bitmap.getHeight ();   int宽度=bitmap.getWidth ();      浮动widthScale=outWidth * 1 f/宽度;   浮动heightScale=outHeight * 1 f/高度;      矩阵矩阵=new矩阵();   矩阵。setScale (widthScale heightScale);//创建输出的位图   位图desBitmap=位图。createBitmap (outWidth outHeight Bitmap.Config.ARGB_8888);//创建画布并传入desBitmap,这样绘制的内容都会在desBitmap上   帆布画布=新画布(desBitmap);   油漆涂料=new涂料(Paint.ANTI_ALIAS_FLAG);//创建着色器   Shader.TileMode BitmapShader BitmapShader=new BitmapShader(位图。夹,Shader.TileMode.CLAMP);//给着色器配置矩阵   bitmapShader.setLocalMatrix(矩阵);   paint.setShader (bitmapShader);//创建矩形区域并且预留出边界   RectF矩形=new RectF(边境,边境,outWidth寄宿生,outHeight -寄宿生);//把传入的位图绘制到圆角矩形区域内   画布。drawRoundRect(矩形,半径,半径、油漆);      如果(寄宿生比;0){//绘制寄宿生   油漆boarderPaint=new油漆(Paint.ANTI_ALIAS_FLAG);   boarderPaint.setColor (Color.GREEN);   boarderPaint.setStyle (Paint.Style.STROKE);   boarderPaint.setStrokeWidth(边界);   画布。drawRoundRect(矩形、半径,半径,boarderPaint);   }   返回desBitmap;   }

Android设置图片圆角的方法