android 实现一个或多个角为圆角图片
来源:互联网 发布:php 做数据统计图 编辑:程序博客网 时间:2024/05/18 02:22
android 实现一个或多个角为圆角图片
不废话先上图 :
实现思路:
- 先绘制一个圆角矩形,不知道的朋友可以去看下这篇文章
参考文章: 完美实现图片圆角和圆形(鸿洋) - 哪些角不需要绘制圆角,将其补全。
- 将需要设置成圆角图片的源图片和新绘制的圆角矩形进行合并(通过PorterDuff.mode)
实现过程
因为懒得自定义,也为了避免太多渗透(前者是关键),用的是生成圆角bitmap对象的方式。如果有需要的朋友可以参考思路自定义View。
- 生成圆角Bitmap对象
public class ImageUtils { 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; /** * 把图片某固定角变成圆角 * * @param bitmap 需要修改的图片 * @param pixels 圆角的弧度 * @param corners 需要显示圆弧的位置 * @return 圆角图片 */ public static Bitmap toRoundCorner(Bitmap bitmap, int pixels, int corners) { //创建一个等大的画布 Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; 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 = pixels; paint.setAntiAlias(true); //去锯齿 canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); //绘制圆角矩形 canvas.drawRoundRect(rectF, roundPx, roundPx, paint); //异或将需要变为圆角的位置的二进制变为0 int notRoundedCorners = corners ^ CORNER_ALL; //哪个角不是圆角我再把你用矩形画出来 if ((notRoundedCorners & CORNER_TOP_LEFT) != 0) { canvas.drawRect(0, 0, roundPx, roundPx, paint); } if ((notRoundedCorners & CORNER_TOP_RIGHT) != 0) { canvas.drawRect(rectF.right - roundPx, 0, rectF.right, roundPx, paint); } if ((notRoundedCorners & CORNER_BOTTOM_LEFT) != 0) { canvas.drawRect(0, rectF.bottom - roundPx, roundPx, rectF.bottom, paint); } if ((notRoundedCorners & CORNER_BOTTOM_RIGHT) != 0) { canvas.drawRect(rectF.right - roundPx, rectF.bottom - roundPx, rectF.right, rectF.bottom, paint); } //通过SRC_IN的模式取源图片和圆角矩形重叠部分 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); //绘制成Bitmap对象 canvas.drawBitmap(bitmap, rect, rect, paint); return output; }}
注意: 这里关于PorterDuff可以参考这个图,一共16种效果,大家可以一一尝试。先绘制的是黄色的图,后绘制的蓝色的图。
- 布局文件
<ImageView android:id="@+id/iv_Test" android:layout_width="200dp" android:layout_height="300dp" android:layout_centerInParent="true" android:scaleType="centerCrop" />
- 使用
/** * 设置数据 */ private void setData() { Bitmap srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test); Bitmap disBitmap = ImageUtils.toRoundCorner(srcBitmap, DensityUtil.dipToPx(this, 20), ImageUtils.CORNER_TOP_LEFT|ImageUtils.CORNER_BOTTOM_RIGHT ); mIvTest.setImageBitmap(disBitmap); srcBitmap.recycle(); }
阅读全文
1 0
- android 实现一个或多个角为圆角图片
- Android imageView 自定义单个或多个角为圆角及圆形图片工具
- Android 自定义 RoundImageView 实现圆角矩形或圆形图片
- canvas处理图片为圆形或圆角矩形
- 继承于UIView,设置其中一个或多个角为圆角
- android设置图片为圆角
- 【Android】将图片转换为圆角
- android设置图片为圆角
- android 读取本地或网络图片,转换为Bitmap -
- android 读取本地或网络图片,转换为Bitmap -
- 实现一个imagebutton, 左边为图片,右边为文字
- android两种方式中自己画一个圆,实现单点触控时拖动图片,跟着拖动点走,并且可以放大或缩小
- 实现Android图片圆角
- 实现Android图片圆角
- 实现Android图片圆角
- 实现Android图片圆角
- Android 实现图片圆角
- android 实现图片圆角
- Spring 事物对系统性能影响
- ARM Cortex-A8 的学习笔记(2)——ARM寄存器
- iOS 清除缓存封装
- js jquery 数组的上移下移置顶置底
- 浪漫的平安夜,听一听小白的年终总结(一)之 2015
- android 实现一个或多个角为圆角图片
- RandomAccessFile实现多线程文件复制
- 使用Redis作为LRU缓存
- mysql中 查询表用到的某个字段
- 打印输出100-999之间的水仙花数
- c++中构造函数不能为虚函数的原因
- 备份与恢复
- TCP/IP状态机
- listview嵌套listview