Android圆形图片或者圆角图片的快速实现
16lz
2021-01-26
Android圆形图片或者圆角图片的快速实现
话不多说直接上code
xml文件布局
初始化控件之后用工具类加载
//第一个参数上下文,第二个控件名称,第三个图片url地址,第四个参数圆角大小
ViewUtils.loadImageRadius(this, mIvpict, stringUrl, 15);//头像
ViewUtils.java工具类
/** * Created by wjw on 2016/11/28 * 倒圆角工具类 */public class ViewUtils { /** * 图片加载 * @param context * @param iv * @param url */ public static void loadImage(Context context, ImageView iv, String url) { if(null ==context || null==iv){ return; } if(Utils.isTxtEmpty(url)){ try { Glide.with(context).load(R.mipmap.placeholder_icon) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL).into(iv); }catch (Exception e){ } }else { try { Glide.with(context).load(url) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL).placeholder(R.mipmap.placeholder_icon).into(iv); } catch (Exception e) { } } } public static void loadImage(Context context, ImageView iv, int id) { if(null ==context || null==iv){ return; } try { Glide.with(context).load(id) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL).placeholder(R.mipmap.placeholder_icon).into(iv); }catch (Exception e){ } } /** * 本地图片 * @param context * @param iv * @param id * @param radius */ public static void loadImage(Context context, ImageView iv, int id,int radius) { if(null ==context || null==iv){ return; } try { Glide.with(context).load(id) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL). transform(new GlideRoundTransform(context, radius)).into(iv); }catch (Exception e){ } } public static void setImageResource(ImageView iv, int id) { if(null!=iv){ iv.setImageResource(id); } } /** * 加载网络图片(带圆角) * @param context * @param iv * @param url * @param radius */ public static void loadImageRadius(Context context, ImageView iv, String url, int radius) { if(null ==context || null==iv){ return; } if(Utils.isTxtEmpty(url)){ try { Glide.with(context).load(R.mipmap.placeholder_icon) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL). transform(new GlideRoundTransform(context, radius)).into(iv); }catch (Exception e){ } }else{ try { Glide.with(context).load(url) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL). transform(new GlideRoundTransform(context, radius)).placeholder(R.mipmap.placeholder_icon).into(iv); }catch (Exception e){ } } } /** * 加载网络图片(圆形) * @param context * @param iv * @param url */ public static void loadImageCircle(Context context, ImageView iv, String url) { if(null ==context || null==iv){ return; } if (Utils.isTxtEmpty(url)) { try { Glide.with(context).load(R.mipmap.placeholder_icon) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL). transform(new GlideCircleTransform(context)).into(iv); }catch (Exception e){ } } else { try { Glide.with(context).load(url) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL).transform(new GlideCircleTransform(context)). placeholder(R.mipmap.placeholder_icon).into(iv); }catch (Exception e){ } } }} //圆形图片 public static class GlideCircleTransform extends BitmapTransformation { public GlideCircleTransform(Context context) { super(context); } @Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) { return circleCrop(pool, toTransform); } private Bitmap circleCrop(BitmapPool pool, Bitmap source) { if (source == null) return null; int size = Math.min(source.getWidth(), source.getHeight()); int x = (source.getWidth() - size) / 2; int y = (source.getHeight() - size) / 2; Bitmap squared = Bitmap.createBitmap(source, x, y, size, size); Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888); if (result == null) { result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888); } Canvas canvas = new Canvas(result); Paint paint = new Paint(); paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP)); paint.setAntiAlias(true); float r = size / 2f; canvas.drawCircle(r, r, r, paint); return result; } @Override public String getId() { return getClass().getName(); } } //圆角 public static class GlideRoundTransform extends BitmapTransformation { private static float radius = 0f; public GlideRoundTransform(Context context) { this(context, 4); } public GlideRoundTransform(Context context, int dp) { super(context); this.radius = Resources.getSystem().getDisplayMetrics().density * dp; } @Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) { return roundCrop(pool, toTransform); } private static Bitmap roundCrop(BitmapPool pool, Bitmap source) { if (source == null) return null; Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888); if (result == null) { result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888); } Canvas canvas = new Canvas(result); Paint paint = new Paint(); paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP)); paint.setAntiAlias(true); RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight()); canvas.drawRoundRect(rectF, radius, radius, paint); return result; } @Override public String getId() { return getClass().getName() + Math.round(radius); } }
效果如图
更多相关文章
- Android实现记事本功能
- 获取手机的视频和图片的缩略图
- Android根据Url显示gif类型图片
- 从android相册获取所有图片的路径
- android画图------字节数组转化为图片
- [代码片段] 【转】Android以最省内存的方式读取本地资源的
- Android(安卓)图片与屏幕坐标点
- Android(安卓)高斯算法在"在路上"APP 的实现
- [置顶] Android加载动态库失败分析