经常在项目中,会遇到使用圆形头像。然而图片往往不是圆形的,我们需要对图片进行处理,以达到圆形图片的效果。这里,我总结了一下常用的android圆形图片的绘制的方法。主要有以下几种方式:1.画布裁剪;2.Xfermode进行重叠;3使用着色器shader。下面我们将一个一个进行描述:

第一种,画布裁剪:通过创建空白的Bitmap生成canvas画布,然后将画布进行裁剪成圆形,最后在画布上进行绘制。见代码:

 /**     * 通过裁剪画布     *     * @param bitmap     * @return     */    public static Bitmap clipDrawable(Bitmap bitmap) {        int width = bitmap.getWidth();        int height = bitmap.getHeight();        int min = Math.min(width, height);        //通过新建一个Bitmap创建一个画布        Bitmap bp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);        Canvas canvas = new Canvas(bp);        Paint paint = new Paint();        paint.setAntiAlias(true);        paint.setColor(Color.BLACK);        //创建圆形路径,用于画布裁剪        Path path = new Path();        path.addCircle(min / 2, min / 2, min / 2, Path.Direction.CCW);        canvas.clipPath(path);        //在裁剪后的画布上进行绘制        canvas.drawBitmap(bitmap, -width / 2 + min / 2, -height / 2 + min / 2, paint);        return bp;    }

第二种,Xfermode:我们使用Xfermode的src_in模式,将原始图片和圆形进行重叠,得到重叠的圆形部分。

/**     * 通过Xfermode     *     * @param bitmap     * @return     */    public static Bitmap getCircleBitmap(Bitmap bitmap) {        int width = bitmap.getWidth();        int height = bitmap.getHeight();        int min = Math.min(width, height);        //通过新建一个Bitmap创建一个画布        Bitmap bp = Bitmap.createBitmap(min, min, Bitmap.Config.ARGB_8888);        Paint paint = new Paint();        paint.setAntiAlias(true);        paint.setColor(Color.GRAY);        Canvas canvas = new Canvas(bp);        canvas.drawCircle(min / 2, min / 2, min / 2, paint);        //设置模式为取重叠的部分        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));//        paint.setColorFilter(new LightingColorFilter(0xFFFFFF00, 0x00000000));//        canvas.drawBitmap(bitmap, min / 2 - width / 2, min / 2 - height / 2, paint);        canvas.drawBitmap(bitmap, null, new Rect(min / 2 - width / 2, min / 2 - height / 2, width / 2 + min / 2, height / 2 + min / 2), paint);        return bp;    }

第三种,shader着色器:给画笔设置着色器,最后使用这个画笔绘制圆形。

 /**     * 通过shader     */    public static Bitmap getShaderBitmap(Bitmap bitmap) {        Paint paint = new Paint();        paint.setAntiAlias(true);        paint.setColor(Color.GRAY);        //设置着色器        paint.setShader(new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));        int width = bitmap.getWidth();        int height = bitmap.getHeight();        int r = Math.min(width, height) / 2;        Bitmap bp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);        Canvas canvas = new Canvas(bp);        //在圆形中进行着色        canvas.drawCircle(width/2, height/2, r, paint);        return bp;    }

总体来说,绘制的方法大致如上所述,大家可以针对自己的需求进行修改。上面的代码写的demo,所以命名方面比较随意,请大家谅解。如果有什么错误的地方,请大家指正,不甚感激。


更多相关文章

  1. Android中仿微信选择图片并展示在RecyclerView中
  2. Android(安卓)Glide扩展实现图片加载进度条
  3. android 9.png图片详解
  4. Android(安卓)文本滚动效果的几种实现方式(二)
  5. android studio 使用.9图片
  6. RecyclerView如何实现滑动过程中暂停图片加载
  7. Android生成二维码--拍照或从相册选取图片
  8. 如何在android上 使用gif图片(android开源库android-gif-drawabl)
  9. 在Xamarin.Forms中使用SkiaSharp绘图时从原生工程中加载图片

随机推荐

  1. Android(安卓)day_09-02 (Activity 短信
  2. Android(安卓)Activity间跳转与传递数据
  3. Android(安卓)非UI线程使用View.post()方
  4. android实现session保持
  5. Android实现定时任务及闹钟
  6. Android(安卓)SharedPreferences保存Map
  7. [译]利斯科夫替换原则在Android中的实践
  8. Android(安卓)Support Percent百分比布局
  9. android 异常问题 Scrollview中嵌套webvi
  10. Android启动之冷启动,热启动