android中对Bitmap图片设置任意角为圆角
http://blog.csdn.net/l448288137/article/details/48276681
最近项目开发中使用到了圆角图片,网上找到的圆角图片控件大多比较死板,只可以全圆角。其中感觉最好的也就是半圆角 链接在这里。想了一下,我自己在这个的基础上进行了一点改进,使得图片可以设置任意角为圆角。
先上效果图:
核心代码
- package fillet.sgn.com.filletimage;
- import android.graphics.Bitmap;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.graphics.PorterDuff;
- import android.graphics.PorterDuffXfermode;
- import android.graphics.Rect;
- import android.graphics.RectF;
- /**
- * Created by liujinhua on 15/9/7.
- */
- public class BitmapFillet {
- public static final int CORNER_NONE = 0;
- public static final int CORNER_TOP_LEFT = 1;
- public static final int CORNER_TOP_RIGHT = 1 << 1;
- public static final int CORNER_BOTTOM_LEFT = 1 << 2;
- public static final int CORNER_BOTTOM_RIGHT = 1 << 3;
- public static final int CORNER_ALL = CORNER_TOP_LEFT | CORNER_TOP_RIGHT | CORNER_BOTTOM_LEFT | CORNER_BOTTOM_RIGHT;
- public static final int CORNER_TOP = CORNER_TOP_LEFT | CORNER_TOP_RIGHT;
- public static final int CORNER_BOTTOM = CORNER_BOTTOM_LEFT | CORNER_BOTTOM_RIGHT;
- public static final int CORNER_LEFT = CORNER_TOP_LEFT | CORNER_BOTTOM_LEFT;
- public static final int CORNER_RIGHT = CORNER_TOP_RIGHT | CORNER_BOTTOM_RIGHT;
- public static Bitmap fillet(Bitmap bitmap, int roundPx,int corners) {
- try {
- // 其原理就是:先建立一个与图片大小相同的透明的Bitmap画板
- // 然后在画板上画出一个想要的形状的区域。
- // 最后把源图片帖上。
- final int width = bitmap.getWidth();
- final int height = bitmap.getHeight();
- Bitmap paintingBoard = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
- Canvas canvas = new Canvas(paintingBoard);
- canvas.drawARGB(Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT);
- final Paint paint = new Paint();
- paint.setAntiAlias(true);
- paint.setColor(Color.BLACK);
- //画出4个圆角
- final RectF rectF = new RectF(0, 0, width, height);
- canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
- //把不需要的圆角去掉
- int notRoundedCorners = corners ^ CORNER_ALL;
- if ((notRoundedCorners & CORNER_TOP_LEFT) != 0) {
- clipTopLeft(canvas,paint,roundPx,width,height);
- }
- if ((notRoundedCorners & CORNER_TOP_RIGHT) != 0) {
- clipTopRight(canvas, paint, roundPx, width, height);
- }
- if ((notRoundedCorners & CORNER_BOTTOM_LEFT) != 0) {
- clipBottomLeft(canvas,paint,roundPx,width,height);
- }
- if ((notRoundedCorners & CORNER_BOTTOM_RIGHT) != 0) {
- clipBottomRight(canvas, paint, roundPx, width, height);
- }
- paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
- //帖子图
- final Rect src = new Rect(0, 0, width, height);
- final Rect dst = src;
- canvas.drawBitmap(bitmap, src, dst, paint);
- return paintingBoard;
- } catch (Exception exp) {
- return bitmap;
- }
- }
- private static void clipTopLeft(final Canvas canvas, final Paint paint, int offset, int width, int height) {
- final Rect block = new Rect(0, 0, offset, offset);
- canvas.drawRect(block, paint);
- }
- private static void clipTopRight(final Canvas canvas, final Paint paint, int offset, int width, int height) {
- final Rect block = new Rect(width - offset, 0, width, offset);
- canvas.drawRect(block, paint);
- }
- private static void clipBottomLeft(final Canvas canvas, final Paint paint, int offset, int width, int height) {
- final Rect block = new Rect(0, height - offset, offset, height);
- canvas.drawRect(block, paint);
- }
- private static void clipBottomRight(final Canvas canvas, final Paint paint, int offset, int width, int height) {
- final Rect block = new Rect(width - offset, height - offset, width, height);
- canvas.drawRect(block, paint);
- }
- }
android中对Bitmap图片设置任意角为圆角的更多相关文章
- android中保存Bitmap图片到指定文件夹中的方法
/** 保存方法 */ public void saveBitmap() { Log.e(TAG, "保存图片"); File f = new File("/s ...
- android中使用Nine-Patch图片
android中可以把图片进行处理,如果图片被拉伸的话,允许让图片部分区域不拉伸,部分区域拉伸.这个功能非常好,比如聊天的气泡,如果整个气泡被拉伸的话,会非常的丑. 老版的sdk中提供的有draw9p ...
- 【原创】如何在Android中为TextView动态设置drawableLeft等
如何在Android中为TextView动态设置drawableLeft等 两种方式: 方式1:手动设置固有边界 Drawable drawable = getResources().getD ...
- 四十六、android中的Bitmap
四十六.android中的Bitmap: http://www.cnblogs.com/linjiqin/archive/2011/12/28/2304940.html 四十七.实现调用Android ...
- Android Glide加载图片时转换为圆形、圆角、毛玻璃等图片效果
Android Glide加载图片时转换为圆形.圆角.毛玻璃等图片效果 附录1简单介绍了Android开源的图片加载框架.在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬 ...
- android中可以使用bitmap的平铺,镜像平铺等减小图片带来的apk过大的问题
bitmap的平铺.镜像drawable文件夹中新建bitmap,其中的tileMode属性 tileMode 属性就是用于定义背景的显示模式: disabled 默认值,表示不使用平铺 cla ...
- Android中常见的图片加载框架
图片加载涉及到图片的缓存.图片的处理.图片的显示等.而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题.很多软件厂家的通用做法就是借用第三方的框架进行 ...
- Android中设定背景图片平铺。
注:本文由Colin撰写,版权所有!转载请注明原文地址,谢谢合作! 在做Android开发时,我们常常需要为程序设定一个背景,但由于现在的Android设备尺寸不一,如果随便设置一个图片为背景,那么很 ...
- android中获取 bitmap 像素的颜色 之吸管取色功能
本功能是参考android API colorPickerView修改,实现类似与PS中吸管取色功能.也就是可以对图片的任意位置取该位置的RGB.本demo中,完成了色盘取色功能.当点击色盘的某个位置 ...
随机推荐
- 关于java的设计模式(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- 一个快速、高效的Levenshtein算法实现——代码实现
在网上看到一篇博客讲解Levenshtein的计算,大部分内容都挺好的,只是在一些细节上不够好,看了很长时间才明白.我对其中的算法描述做了一个简单的修改.原文的链接是:一个快速.高效的Levensht ...
- js求两个数的最大公约数
1, lcm=function(m,n){//辗转相除法 求最大公约数 var u=+m,v=+n,t=v; while(v!=0){ t=u%v; u=v; v=t; } return u }2, ...
- java上传并下载以及解压zip文件有时会报文件被损坏错误分析以及解决
情景描述: 1.将本地数据备份成zip文件: 2.将备份的zip文件通过sftp上传到文件服务器: 3.将文件服务器上的zip文件下载到运行服务器: 4.将下载的zip文件解压到本地(文件大小超过50 ...
- select空间提交form表单传递参数
如下, 到了 <form name="modelForm" action="/portal/defectinfo/toDefectPage?projectname= ...
- CVE-2015-0057 POC构造 & 利用分析(2015.7)
CVE-2015-0057 POC构造 & 利用分析 主要内容: 构造POC 利用思路 0x00 初探 从这篇文章可以获知: 1.问题出在 win32k!xxxEnableWndSBArrow ...
- HDU 1517 A Multiplication Game 博弈
题目大意:从1开始Stan与Ollie经行博弈,stan先手,每次将当前数乘上(2~9)间的任意数,最后一次操作后大于等于n的人获胜. 题目思路: 1-9 stan 胜 10-18 ollie胜 19 ...
- sqlserver和Windows资源管理器争用内存
sqlserver和Windows资源管理器在设置成相同的优先级的情况下(普通),Windows资源管理器优先于sqlserver对内存的征用.开始是
- C#变量修饰符
访问修饰符 关键字包括:internal,public,protected和private,用于设置变量的访问级别. public 变量可以做为它所属的类型的一个字段,可以在任何地方访问它. i ...
- sql 针对多个id或名称的分割和组合
开发中经常遇到把多个id拼接在一起符号隔开传入数据库,那拆分呢就是个大事 SELECT nPushID INTO #temp FROM Table1 ), nCoulmn) SELECT * FROM ...