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设置图片圆角的方法