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);        }    }

效果如图

更多相关文章

  1. Android实现记事本功能
  2. 获取手机的视频和图片的缩略图
  3. Android根据Url显示gif类型图片
  4. 从android相册获取所有图片的路径
  5. android画图------字节数组转化为图片
  6. [代码片段] 【转】Android以最省内存的方式读取本地资源的
  7. Android(安卓)图片与屏幕坐标点
  8. Android(安卓)高斯算法在"在路上"APP 的实现
  9. [置顶] Android加载动态库失败分析

随机推荐

  1. 查看基于Android(安卓)系统单个进程内存
  2. android 开发学习笔记 (一)
  3. android 创建数字签名应用程序
  4. "Uses or overrides a deprecated API" i
  5. android 多版本打包之productFlavors 用
  6. Android(java)学习笔记126:Android(安卓)Stu
  7. Android(安卓)中的单元测试(使用AndroidT
  8. Android深入浅出系列课程---Lesson9 AAF1
  9. Android应用开发试题(收集)
  10. 安卓开发38:安卓的滚动条相关属性