这里说到的圆角图片就是一个矩形,不过其边角不是直的线性结合,而是存在一定弧度的,例如下图的效果:

这里有一个非常关键的方法,是Paint类中的setXfermode(Xfermode xfermode)方法。关于此方法的使用和效果大家可以参见这篇博客:http://www.cnblogs.com/rayray/p/3670120.html

实际上就是用两张图片的叠加组合。在原来图片的基础上进行叠加一叠加一层自己绘制的一个圆角图片,再蒙上去。程序中我们是这样来使用的:paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));如果我们把Mode.SRC_IN换成是Mode.SCREEN,再结合上面给出的博客链接,大家就可以理解得很清晰了。

关于圆角的关键代码如下:

public static Bitmap getFilletBitmap(Bitmap bitmap) {Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);Canvas canvas = new Canvas(output);final int color = 0xffEEAD0E;final Paint paint = new Paint();final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());final RectF rectF = new RectF(rect);final float roundPx = 100;paint.setAntiAlias(true);canvas.drawARGB(0, 0, 0, 0);paint.setColor(color);canvas.drawRoundRect(rectF, roundPx, roundPx, paint);paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); // 这句是关键canvas.drawBitmap(bitmap, rect, rect, paint);return output;}

至于圆形的图片,是和这个是一样的。不过值得注意的是,这只是绘制圆角和圆形图片的某一种方式,还有就是可以去直接画一个圆角或圆形的View出来,这样会更加的炫。这个在以后的博客中也会提到,这里就不作过多讲解了。圆形图片的关键代码如下:

public Bitmap getRoundBitmap(Bitmap bitmap) {int width = bitmap.getWidth();int height = bitmap.getHeight();float roundPx;float left, top, right, bottom, dst_left, dst_top, dst_right, dst_bottom;if (width <= height) {roundPx = width / 2;left = 0;top = 0;right = width;bottom = width;height = width;dst_left = 0;dst_top = 0;dst_right = width;dst_bottom = width;} else {roundPx = height / 2;float clip = (width - height) / 2;left = clip;right = width - clip;top = 0;bottom = height;width = height;dst_left = 0;dst_top = 0;dst_right = height;dst_bottom = height;}Bitmap output = Bitmap.createBitmap(width, height, Config.ARGB_8888);Canvas canvas = new Canvas(output);final Paint paint = new Paint();final Rect src = new Rect((int) left, (int) top, (int) right, (int) bottom);final Rect dst = new Rect((int) dst_left, (int) dst_top, (int) dst_right, (int) dst_bottom);final RectF rectF = new RectF(dst);paint.setAntiAlias(true);// 设置画笔无锯齿canvas.drawARGB(0, 0, 0, 0); // 填充整个Canvas// 以下有两种方法画圆,drawRounRect和drawCirclecanvas.drawRoundRect(rectF, roundPx, roundPx, paint);// 画圆角矩形,第一个参数为图形显示区域,第二个参数和第三个参数分别是水平圆角半径和垂直圆角半径。// canvas.drawCircle(roundPx, roundPx, roundPx, paint);paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));// 设置两张图片相交时的模式,参考http://www.cnblogs.com/rayray/p/3670120.htmlcanvas.drawBitmap(bitmap, src, dst, paint); // 以Mode.SRC_IN模式合并bitmap和已经draw了的Circlereturn output;}

工程代码下载: http://download.csdn.net/detail/u013761665/8027647

Android中绘制圆形和圆角图片相关推荐

  1. android paint 圆角 绘制_Android中绘制圆形和圆角图片

    这里说到的圆角图片就是一个矩形,不过其边角不是直的线性结合,而是存在一定弧度的,例如下图的效果: 这里有一个非常关键的方法,是Paint类中的setXfermode(Xfermode xfermode ...

  2. Android中的Picasso实现圆角图片

    注:有关Picasso的基本介绍,请参考我的上篇博客 Android图形缓存库Picasso的使用 Picasso支持自定义Transformation public class CropSquare ...

  3. 在Android中绘制圆角矩形图片

    圆角矩形图片在苹果的产品中很流行,相比于普通的矩形,很多人都喜欢圆角矩形的图片,下面在Android中实现将普通的矩形图片绘制成圆角矩形.        先来看一下普通矩形图片的显示,代码很简单,从r ...

  4. Android中绘制圆角矩形图片及任意形状图片

    转自http://blog.csdn.net/silangquan/article/details/8056583 圆角矩形图片在苹果的产品中很流行,相比于普通的矩形,很多人都喜欢圆角矩形的图片,因为 ...

  5. Android Paint 绘制空心渐变圆角矩形

    Android Paint 绘制空心渐变圆角矩形 在onDraw()中使用Paint绘制空心的圆角矩形 代码 @Overrideprotected void onDraw(Canvas canvas) ...

  6. Android 中自定义View 裁剪扇形图片

    Android 中自定义View 裁剪扇形图片 当需要裁剪图片为扇形区域时,使用Canvas.clipPath(path)方法可以裁剪为扇形区域 ps:此方法会导致绘制图片边缘有锯齿,暂无解决方法(知 ...

  7. java安卓图片全屏_在Android中全屏显示GIF图片(演示代码)

    [实例简介] 在Android中全屏显示GIF图片(演示代码),详细内容请参考:http://blog.csdn.net/u012939909/article/details/77418173 [实例 ...

  8. matlab在二维平面和三维空间中绘制圆形

    matlab在二维平面和三维空间中绘制圆形 二维平面绘制圆形 方法1: x = 10;y = 10;%圆心 r = 5; %半径 rectangle('Position',[x-r,y-r,2*r,2 ...

  9. c++中用opengl的gl函数在三维空间中绘制圆形和画球体

    c++中用opengl的gl函数在三维空间中绘制圆形和球体 绘制圆形原理: 画圆形的原理如下图,画一个圆形就相当于切蛋糕一样,将一个圆形切成很多个扇形,而扇形可以用三角形类似表示,所以我们可以将绘制圆 ...

最新文章

  1. HTML SVG 如何下载svg文件,png文件,jpge文件
  2. python多线程 不在main_Python多线程
  3. 【论文复现与改进】针对弱标注数据多标签矩阵恢复问题,改进后的MCWD算法,让你的弱标注多标签数据赢在起跑线上
  4. wxWidgets:wxMouseEvent类用法
  5. Log4Net简单使用
  6. JDK 14的新特性:文本块Text Blocks
  7. 【做题记录】 [HEOI2013]SAO
  8. html纵向固定导航菜单代码,jQuery和css3响应式垂直固定导航菜单插件
  9. word手写字体以假乱真_轻松制作个人“电子版手写签名”
  10. 逻辑代码题:五个学生参加计算机比赛
  11. 3.6 tensorflow 中LSTM和GRU模块使用意境级讲解
  12. python_argparse简介
  13. PS在园林计算机辅助设计中有哪些应用,风景园林计算机辅助设计(谷永丽)(第2版)...
  14. mac安装旺旺启动台找不到_如何正确安装卸载mac软件
  15. Unity3D制作平面FlappyBird小游戏
  16. PIL imagefont 添加下划线
  17. APE转MP3的转换码率说明
  18. 在vue中使用iconfont多色图标
  19. MATLAB频数表-tabulate/hist
  20. Gym101635C Macarons

热门文章

  1. 深度探索C++ 对象模型(6)-Data member的存取
  2. 攻防世界Reverse第七题simple-unpack
  3. 内建函数对象(STL)
  4. 【Flask项目2】定制统一的JSON返回格式(6)
  5. python—多线程之数据混乱问题
  6. [mmu/cache]-cache在linux和optee中的应用-InProgress
  7. Django常用的模块
  8. TCP/IP的基本介绍
  9. Win10 KMD驱动模板,应用层向内核传一个字符串,内核把它转成大写
  10. 2020-12-14(全局/静态对象的构造函数和析构函数调用的时机以及地址)