[置顶] android 自定义圆角ImageView以及锯齿的处理
看到很多人开发过程中要使用圆角图片时,解决方法有:
1.重新绘制一张图片
2.通过布局来配置
3.通过重写View来实现
其中1,2在这里就不讲了,重点讲讲方法三的实现。
实现一:通过截取画布一个圆形区域与图片的相交部分进行绘制,缺点:锯齿明显,设置Paint,Canvas抗锯齿无效。
package com.open.circleimageview.widget;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.Region;
import android.util.AttributeSet;
import android.view.View;public class CircleImageViewA extends View {public CircleImageViewA(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}public CircleImageViewA(Context context, AttributeSet attrs) {super(context, attrs);}public CircleImageViewA(Context context) {super(context);}private Bitmap bitmap;private Rect bitmapRect=new Rect();private PaintFlagsDrawFilter pdf=new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);private Paint paint = new Paint();{paint.setStyle(Paint.Style.STROKE);paint.setFlags(Paint.ANTI_ALIAS_FLAG);paint.setAntiAlias(true);// 设置画笔的锯齿效果。 true是去除,大家一看效果就明白了 }private Path mPath=new Path();public void setImageBitmap(Bitmap bitmap){this.bitmap=bitmap;}@Overrideprotected void onDraw(Canvas canvas) {if(null==bitmap){return;}bitmapRect.set(0, 0, getWidth(), getHeight());canvas.save();canvas.setDrawFilter(pdf);mPath.reset();canvas.clipPath(mPath); // makes the clip emptymPath.addCircle(getWidth()/2, getWidth()/2, getHeight()/2, Path.Direction.CCW);canvas.clipPath(mPath, Region.Op.REPLACE);canvas.drawBitmap(bitmap, null, bitmapRect, paint);canvas.restore();}}
实现二:通过PorterDuffXfermode 方式(注意要设置硬件加速,否则部分机子无效),优点:锯齿基本没有
package com.open.circleimageview.widget;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;public class CircleImageViewB extends View {public CircleImageViewB(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);init();}public CircleImageViewB(Context context, AttributeSet attrs) {super(context, attrs);init();}public CircleImageViewB(Context context) {super(context);init();}private Bitmap bitmap;private Rect bitmapRect=new Rect();private PaintFlagsDrawFilter pdf=new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);private Paint paint = new Paint();{paint.setStyle(Paint.Style.STROKE);paint.setFlags(Paint.ANTI_ALIAS_FLAG);paint.setAntiAlias(true);// 设置画笔的锯齿效果。 true是去除,大家一看效果就明白了 }private Bitmap mDstB=null;private PorterDuffXfermode xfermode=new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY);private void init(){try {if(android.os.Build.VERSION.SDK_INT>=11){setLayerType(LAYER_TYPE_SOFTWARE, null);}} catch (Exception e) {e.printStackTrace();}}public void setImageBitmap(Bitmap bitmap){this.bitmap=bitmap;}private Bitmap makeDst(int w, int h) {Bitmap bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);Canvas c = new Canvas(bm);Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);p.setColor(Color.parseColor("#ffffffff")); c.drawOval(new RectF(0, 0, w, h), p);return bm;}@Overrideprotected void onDraw(Canvas canvas) {if(null==bitmap){return;}if(null==mDstB){mDstB=makeDst(getWidth(), getHeight());}bitmapRect.set(0, 0, getWidth(), getHeight());canvas.save();canvas.setDrawFilter(pdf);canvas.drawBitmap(mDstB, 0, 0, paint);paint.setXfermode(xfermode);canvas.drawBitmap(bitmap, null, bitmapRect, paint);paint.setXfermode(null);canvas.restore();}}
效果图如下:
代码地址:http://download.csdn.net/detail/zz7zz7zz/6240225
转载于:https://www.cnblogs.com/suncoolcat/p/3313357.html
[置顶] android 自定义圆角ImageView以及锯齿的处理相关推荐
- android imageview 锯齿,[置顶] android 自定义圆角ImageView以及锯齿的处理
看到很多人开发过程中要使用圆角图片时,解决方法有: 1.重新绘制一张图片 2.通过布局来配置 3.通过重写View来实现 其中1,2在这里就不讲了,重点讲讲方法三的实现. 实现一:通过截取画布一个圆形 ...
- android imageview 锯齿,android 自定义圆角ImageView以及锯齿的处理
看到很多人开发过程中要使用圆角图片时,解决方法有: 1.重新绘制一张图片 2.通过布局来配置 3.通过重写View来实现 其中1,2在这里就不讲了,重点讲讲方法三的实现. 实现一:通过截取画布一个圆形 ...
- 安卓自定义view中 绘画基本图形点线面,矩形,方形,圆,扇形,文字及沿着特定方向布局,自定义圆角ImageView图片等等相关api使用方法及举例
安卓自定义view中 绘画基本图形点线面,矩形,方形,圆,扇形,文字及沿着特定方向布局,自定义圆角ImageView图片等等相关api使用方法及举例,图片压缩处理逻辑 本文旨在介绍自定义View的实现 ...
- android listview标题置顶,Android仿QQ左滑删除置顶ListView操作
最近闲来无事,于是研究了一下qq的左滑删除效果,尝试着实现了一下,先上效果图: 大致思路原理: - 通过设置margin实现菜单的显示与隐藏 - 监听onTouchEvent,处理滑动事件 上代码 i ...
- [置顶] Android自定义控件 芝麻信用分雷达图
[置顶] Android自定义控件 芝麻信用分雷达图 标签: android自定义雷达芝麻信用 2016-10-23 20:11 3548人阅读 评论(24) 收藏 举报 分类: 自定义控 ...
- Android自定义圆角边框
Android自定义圆角边框 一. 说明 本文主要讲如何自定义一个圆角的边框 二. 所用工具 Android Studio 三. 内容 1. 涉及到的内容 solid:设置背景色 stroke:设置边 ...
- android列表实现置顶,Android利用RecyclerView实现全选、置顶和拖拽功能示例
Android利用RecyclerView实现全选.置顶和拖拽功能示例 发布时间:2020-08-23 16:26:42 来源:脚本之家 阅读:159 作者:爱开发 前言 今天给大家分享是如何在Rec ...
- android自定义圆角进度条,Android自定义进度条的圆角横向进度条实例详解
1.本文将向你介绍自定义进度条的写法,比较简单,但还是有些知识点是需要注意的: invalidate()方法 RectF方法的应用 onMeasure方法的应用 2.原理 画3层圆角矩形,底层为黑色, ...
- Android 自定义圆角布局
在android 开发中,图片或者button 有圆角的布局显得格外的美观些,所以今天就来 自定义圆角布局,只要把控件放入圆角布局中,然后设置属性就能实现圆角布局样式 接下来就来实现这样的功能 效果图 ...
最新文章
- mysql主从库配置ps:mysql5.6
- 了解 NoSQL 的必读资料
- c 指定端口连接mysql_c++连接mysql(MYSQL C api使用)
- 02_pyplot.plot函数、回顾第一个例子、格式字符串、plot函数、线型风格字符、标记(marker)字符、颜色字符
- java nginx 例子_Nginx配置日志
- 程序默认在副屏显示_聊一款性价比极高的电竞显示器
- apache mediawiki 安装_如何在CentOS 7上安装MediaWiki
- Java BigDecimal stripTrailingZeros()方法与示例
- [vue] vue如何监听键盘事件?
- php输入数据提交排序,排序php数据var
- git eclipse 取消误操作 ignore(忽略)文件
- js实现数据流(日志流,报警信息等)滚动展示,并分页(含实现demo)
- fzu 2077 The tallest tree
- MySQL(八)事务的隔离级别
- 联系人存储ContactsProvider表分析
- win10时间不准_简单几招教会你win10系统时间不准怎么解决
- 数组分割 java_分割java数组
- ctc系统通信前置服务器,CTC系统包括哪些接口服务器?
- *16.5 shared_ptr使用场景、陷阱、性能分析与使用建议
- python打印列表的下标和值的例子:
热门文章
- ubuntu安装vasp_用强大的GROMACS分析工具分析VASP的动力学结果
- 最大子段和动态规划_动态规划解决最大正方形问题
- python怎么创意出字符图形_创造课程系列:Python入门
- java过滤器命名_JAVA过滤器的使用(Filter)
- ue4vr插件_UE4 含源码插件合集【转载】
- mysql显示错误代码1067_每日一记--Mysql错误代码1067
- 如何用php饼型图,php绘制饼状图的代码举例
- 5导出word_重磅更新 !支持题库导出为word
- aliyun maven 添加jar_Maven介绍及安装
- java volatile 基本类型_Java中Volatile关键字详解(转)