博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 图片圆角化控件
阅读量:4618 次
发布时间:2019-06-09

本文共 1833 字,大约阅读时间需要 6 分钟。

最近项目有个需求,是把图片缩放成圆形,头像都以圆形显示。

网上有好多开源代码,答题思路都是一样的,画一个圆,然后再把图片放上边去,使用PorterDuffXfermode这个类来进行设置,PorterDuffXfermode这个类如何使用,请自行搜索吧。

如何做一个自定义控件就不赘述了。我找了一个网上做好的自定义控件的类,在ondraw中去处理图片,后来发现会出现一些问题,因为ondraw中不能做复杂的操作,否则功能无法实现,需要实现的功能实现不了,所以我把处理图片放到了onSizeChanged(int w, int h, int oldw, int oldh)中区处理,ondraw就处理显示,代码如下:

public class CircleImageView extends View {	  public CircleImageView(Context context, AttributeSet attrs, int defStyle) {	    super(context, attrs, defStyle);	  }	  public CircleImageView(Context context, AttributeSet attrs) {	    super(context, attrs);	  }	  public CircleImageView(Context context) {	    super(context);	  }	  private Bitmap bitmap;	  private Paint paint = new Paint();	  {	      paint.setStyle(Paint.Style.STROKE);	      paint.setFlags(Paint.ANTI_ALIAS_FLAG);	      paint.setAntiAlias(true);// 设置画笔的锯齿效果 true是去除,大家效果就明白了 	  }	    	  public void setImageBitmap(Bitmap bitmap)	  {		  if(this.bitmap==null && bitmap !=null){			  this.bitmap=bitmap;		  }	  }	  	  @Override  	  protected void onSizeChanged(int w, int h, int oldw, int oldh) { 		  Bitmap output = Bitmap.createBitmap(w, h, 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, w, h); 	      final RectF rectF = new RectF(rect); 		      paint.setAntiAlias(true); 	      canvas.drawARGB(0, 0, 0, 0); 	      paint.setColor(color); 	      canvas.drawOval(rectF, paint); 		      paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 	      canvas.drawBitmap(bitmap, null, rect, paint); 	      this.bitmap = output;	  }	  	  @Override	  protected void onDraw(Canvas canvas) {		  canvas.drawBitmap(bitmap, 0, 0, paint);		  super.onDraw(canvas);	  }}

  

转载于:https://www.cnblogs.com/jy05892485/p/3686139.html

你可能感兴趣的文章
解决Jupyter notebook[import tensorflow as tf]报错
查看>>
Windows平台下使用ffmpeg和segmenter实现m3u8直播点播
查看>>
python网络画图——networkX
查看>>
ubuntu16.04文件形式安装mongodb
查看>>
SpringBoot------ActiveMQ安装
查看>>
详细了解 int? 类型
查看>>
纯js事件注册方法(解决兼容性)
查看>>
字符串匹配 ?kmp : hash
查看>>
mongod.service: control process exited, code=exited status=1
查看>>
vue npm 安装
查看>>
大照片背景在网页设计中应用的精美作品范例(下篇)
查看>>
c# 发送邮件、附件 分类: C# 2014-12-...
查看>>
对360来说,江湖上再无“搜狗”这个传说
查看>>
composer
查看>>
OpenCV特征点检测——ORB特征
查看>>
mysql的csv数据导入与导出
查看>>
leetcode笔记:Pascal's Triangle
查看>>
java Hibernate UUID代码
查看>>
【QwQ】乱七八糟的置顶
查看>>
ASP.NET性能优化之构建自定义文件缓存
查看>>