Android中绘制圆形和圆角图片
这里说到的圆角图片就是一个矩形,不过其边角不是直的线性结合,而是存在一定弧度的,例如下图的效果:
这里有一个非常关键的方法,是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中绘制圆形和圆角图片相关推荐
- android paint 圆角 绘制_Android中绘制圆形和圆角图片
这里说到的圆角图片就是一个矩形,不过其边角不是直的线性结合,而是存在一定弧度的,例如下图的效果: 这里有一个非常关键的方法,是Paint类中的setXfermode(Xfermode xfermode ...
- Android中的Picasso实现圆角图片
注:有关Picasso的基本介绍,请参考我的上篇博客 Android图形缓存库Picasso的使用 Picasso支持自定义Transformation public class CropSquare ...
- 在Android中绘制圆角矩形图片
圆角矩形图片在苹果的产品中很流行,相比于普通的矩形,很多人都喜欢圆角矩形的图片,下面在Android中实现将普通的矩形图片绘制成圆角矩形. 先来看一下普通矩形图片的显示,代码很简单,从r ...
- Android中绘制圆角矩形图片及任意形状图片
转自http://blog.csdn.net/silangquan/article/details/8056583 圆角矩形图片在苹果的产品中很流行,相比于普通的矩形,很多人都喜欢圆角矩形的图片,因为 ...
- Android Paint 绘制空心渐变圆角矩形
Android Paint 绘制空心渐变圆角矩形 在onDraw()中使用Paint绘制空心的圆角矩形 代码 @Overrideprotected void onDraw(Canvas canvas) ...
- Android 中自定义View 裁剪扇形图片
Android 中自定义View 裁剪扇形图片 当需要裁剪图片为扇形区域时,使用Canvas.clipPath(path)方法可以裁剪为扇形区域 ps:此方法会导致绘制图片边缘有锯齿,暂无解决方法(知 ...
- java安卓图片全屏_在Android中全屏显示GIF图片(演示代码)
[实例简介] 在Android中全屏显示GIF图片(演示代码),详细内容请参考:http://blog.csdn.net/u012939909/article/details/77418173 [实例 ...
- matlab在二维平面和三维空间中绘制圆形
matlab在二维平面和三维空间中绘制圆形 二维平面绘制圆形 方法1: x = 10;y = 10;%圆心 r = 5; %半径 rectangle('Position',[x-r,y-r,2*r,2 ...
- c++中用opengl的gl函数在三维空间中绘制圆形和画球体
c++中用opengl的gl函数在三维空间中绘制圆形和球体 绘制圆形原理: 画圆形的原理如下图,画一个圆形就相当于切蛋糕一样,将一个圆形切成很多个扇形,而扇形可以用三角形类似表示,所以我们可以将绘制圆 ...
最新文章
- HTML SVG 如何下载svg文件,png文件,jpge文件
- python多线程 不在main_Python多线程
- 【论文复现与改进】针对弱标注数据多标签矩阵恢复问题,改进后的MCWD算法,让你的弱标注多标签数据赢在起跑线上
- wxWidgets:wxMouseEvent类用法
- Log4Net简单使用
- JDK 14的新特性:文本块Text Blocks
- 【做题记录】 [HEOI2013]SAO
- html纵向固定导航菜单代码,jQuery和css3响应式垂直固定导航菜单插件
- word手写字体以假乱真_轻松制作个人“电子版手写签名”
- 逻辑代码题:五个学生参加计算机比赛
- 3.6 tensorflow 中LSTM和GRU模块使用意境级讲解
- python_argparse简介
- PS在园林计算机辅助设计中有哪些应用,风景园林计算机辅助设计(谷永丽)(第2版)...
- mac安装旺旺启动台找不到_如何正确安装卸载mac软件
- Unity3D制作平面FlappyBird小游戏
- PIL imagefont 添加下划线
- APE转MP3的转换码率说明
- 在vue中使用iconfont多色图标
- MATLAB频数表-tabulate/hist
- Gym101635C Macarons
热门文章
- 深度探索C++ 对象模型(6)-Data member的存取
- 攻防世界Reverse第七题simple-unpack
- 内建函数对象(STL)
- 【Flask项目2】定制统一的JSON返回格式(6)
- python—多线程之数据混乱问题
- [mmu/cache]-cache在linux和optee中的应用-InProgress
- Django常用的模块
- TCP/IP的基本介绍
- Win10 KMD驱动模板,应用层向内核传一个字符串,内核把它转成大写
- 2020-12-14(全局/静态对象的构造函数和析构函数调用的时机以及地址)