方法1: 使用RoundedBitmapDrawable

public static RoundedBitmapDrawable bitmapToRoundedDrawable(@NonNull Resources res, @NonNull Bitmap bitmap,boolean circular, float cornerRadius) {RoundedBitmapDrawable drawable = RoundedBitmapDrawableFactory.create(res, bitmap);drawable.setAlpha(255);//设置透明度drawable.setAntiAlias(true);//设置抗锯齿drawable.setDither(true);//设置防抖动drawable.setGravity(Gravity.CENTER);if (circular) {drawable.setCircular(true);//设置正圆形} else {drawable.setCornerRadius(cornerRadius);//设置圆角半径}return drawable;}final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test);
//圆形照片
final Drawable circleDrawable = Util.bitmapToRoundedDrawable(getResources(), bitmap, true, 0);
mImageView1.setImageDrawable(circleDrawable);
//圆角照片
final Drawable roundedDrawable = Util.bitmapToRoundedDrawable(getResources(), bitmap, false, 100);
mImageView2.setImageDrawable(roundedDrawable);

使用RoundedBitmapDrawable生成带边框的圆形照片:

public static Drawable bitmapToRoundedDrawableWithBorder(Resources res, Bitmap bitmap) {//原图宽度int bitmapWidth = bitmap.getWidth();//原图高度int bitmapHeight = bitmap.getHeight();//边框宽度 pixelint borderWidthHalf = 20;//转换为正方形后的宽高int bitmapSquareWidth = Math.min(bitmapWidth, bitmapHeight);//最终图像的宽高int newBitmapSquareWidth = bitmapSquareWidth + borderWidthHalf;Bitmap roundedBitmap = Bitmap.createBitmap(newBitmapSquareWidth, newBitmapSquareWidth, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(roundedBitmap);int x = borderWidthHalf + bitmapSquareWidth - bitmapWidth;int y = borderWidthHalf + bitmapSquareWidth - bitmapHeight;//裁剪后图像,注意X,Y要除以2 来进行一个中心裁剪canvas.drawBitmap(bitmap, x / 2, y / 2, null);Paint borderPaint = new Paint();borderPaint.setAntiAlias(true);borderPaint.setStyle(Paint.Style.STROKE);borderPaint.setStrokeWidth(borderWidthHalf);borderPaint.setColor(Color.GRAY);//添加边框canvas.drawCircle(canvas.getWidth() / 2, canvas.getWidth() / 2, newBitmapSquareWidth / 2, borderPaint);return bitmapToRoundedDrawable(res, roundedBitmap, true, 0);}
final Drawable roundedDrawableWithBorder = Util.bitmapToRoundedDrawableWithBorder(getResources(), bitmap);
mImageView3.setImageDrawable(roundedDrawableWithBorder);

方法2: 使用PorterDuffXfermode(PorterDuff.Mode.SRC_IN)实现圆角照片

public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) {try {int width = bitmap.getWidth();int height = bitmap.getHeight();Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(output);final Paint paint = new Paint();final Rect rect = new Rect(0, 0, width, height);final RectF rectF = new RectF(rect);final float roundPx = 200;paint.setAntiAlias(true);canvas.drawARGB(0, 0, 0, 0);paint.setColor(Color.BLACK);canvas.drawRoundRect(rectF, roundPx, roundPx, paint);paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));final Rect src = new Rect(0, 0, width, bitmap.getHeight());canvas.drawBitmap(bitmap, src, rect, paint);return output;} catch (Exception e) {e.printStackTrace();return bitmap;}}
final Bitmap roundBitmap = Util.getRoundedCornerBitmap(bitmap);
mImageView4.setImageBitmap(roundBitmap);

方法3: 使用BitmapShader带边框的圆形照片

public static Bitmap getRoundBitmapByShader(Bitmap bitmap, int outWidth, int outHeight, int radius, int boarder) {if (bitmap == null) {return null;}int width = bitmap.getWidth();int height = bitmap.getHeight();float widthScale = outWidth * 1f / width;float heightScale = outHeight * 1f / height;Matrix matrix = new Matrix();matrix.setScale(widthScale, heightScale);//创建输出的bitmapBitmap desBitmap = Bitmap.createBitmap(outWidth, outHeight, Bitmap.Config.ARGB_8888);//创建canvas并传入desBitmap,这样绘制的内容都会在desBitmap上Canvas canvas = new Canvas(desBitmap);Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);//创建着色器BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);//给着色器配置matrixbitmapShader.setLocalMatrix(matrix);paint.setShader(bitmapShader);//创建矩形区域并且预留出borderRectF rect = new RectF(boarder, boarder, outWidth - boarder, outHeight - boarder);//把传入的bitmap绘制到圆角矩形区域内canvas.drawRoundRect(rect, radius, radius, paint);if (boarder > 0) {//绘制boarderPaint boarderPaint = new Paint(Paint.ANTI_ALIAS_FLAG);boarderPaint.setColor(Color.BLACK);boarderPaint.setStyle(Paint.Style.STROKE);boarderPaint.setStrokeWidth(boarder);canvas.drawRoundRect(rect, radius, radius, boarderPaint);}return desBitmap;}
final Bitmap roundBitmap1 = Util.getRoundBitmapByShader(bitmap, 800, 800, 400, 50);
mImageView5.setImageBitmap(roundBitmap1);

方法4: 使用CareView使用圆角

<android.support.v7.widget.CardViewandroid:layout_width="300dp"android:layout_height="300dp"app:cardBackgroundColor="#1ac"app:cardCornerRadius="12dp"app:cardElevation="0dp"app:cardPreventCornerOverlap="false"><ImageViewandroid:id="@+id/iv6"android:layout_width="300dp"android:layout_height="300dp"android:scaleType="centerCrop" /></android.support.v7.widget.CardView>

Android实现圆角照片和圆形照片相关推荐

  1. Android圆形imageview布局,Android实现圆角矩形和圆形ImageView的方式

    Android中实现圆角矩形和圆形有很多种方式,其中最常见的方法有ImageLoader设置Option和自定义View. 1.ImageLoader加载图片 public static Displa ...

  2. android 解决小米手机上选择照片路径为null的问题

    之前做了一个获取相册选择图片的功能,后来测试人员在小米的手机 测试时出现崩溃现象.自己就在网上查找资料,发现是小米的获取图片路径的代码与其他的手机不一样,于是修改了代码,解决了这个问题,这里记录一下. ...

  3. 易企秀如何生成图片_易企秀如何制作圆形照片

    [www.520z-2.com - 话题作文] 篇一:<PS制作圆形全景图教程> 这篇教程像飞特网的朋友们介绍用PS制作圆形全景图的方法,其中还介绍到了PS最新的自动拼接全景图功能,希望飞 ...

  4. android小米手机上传图片,android 解决小米手机上选择照片路径为null的问题

    释放双眼,带上耳机,听听看~! 之前做了一个获取相册选择图片的功能,后来测试人员在小米的手机 测试时出现崩溃现象.自己就在网上查找资料,发现是小米的获取图片路径的代码与其他的手机不一样,于是修改了代码 ...

  5. Android通过Bluetooth蓝牙发送手机照片文件到Windows PC:Java实现

    Android通过Bluetooth蓝牙发送手机照片文件到Windows PC:Java实现 本文在<Android通过蓝牙发送数据到Windows PC电脑:Java实现(链接地址:https ...

  6. Android 仿微信显示的聊天照片

    Android 仿微信显示的聊天照片 Android 仿微信显示的聊天照片,效果如下图所示: 这种显示的样式就是和微信的显示照片的样式是一样的,微信的实现我不知道是否和我一样,今天我来和大家介绍一下我 ...

  7. 如何在 Android上恢复已删除的照片? 3个有效方法请收藏

    有时,我们会错误地删除令人难忘的照片.视频和其他数据.这无疑是一个令人沮丧的情况,但不要担心:我们将修复它并帮助您恢复丢失的文件.在本文中,我们将讨论在一些简单的方法和快速恢复软件的帮助下恢复已删除照 ...

  8. [Android开发]不操作Bitmap实现圆角ImageView、圆形ImageView,支持添加背景圆形或圆角矩形边框、边框支持渐变色

    一.主要解决的使用场景 1.使用Glide加载图片时,我们往往需要设置加载中和加载失败的图片,app中不同的页面的显示的图片可能是圆形,也可能是圆角矩形图,Glide设置placeholder和err ...

  9. html中怎么设置页面的弧度,如何用css实现弧度圆角?三角形以及圆形

    如何用css实现弧度圆角?三角形以及圆形 用css画矩形圆角 ,需要使用到border-radius这个属性,下图四角圆,代码显示如下:border-radius:60px; width:360px; ...

最新文章

  1. Nature今年首次撤稿给了微软:研究团队成员自曝删改不利数据,量子计算重大进展是假的...
  2. java 获取网络带宽_Java开发网 - 一个测网络延迟和带宽的程序,发10M的数据有问题...
  3. 多线程使用SO_REUSEPORT来实现多个socket监听同一个端口
  4. linux cpu平均负载,关于linux系统CPU篇---平均负载
  5. python项目部署到url_项目上线部署
  6. 【培训稿件】构建WCF面向服务的应用程序(包含ppt,源代码)
  7. 山石网科发布重磅容器安全产品“山石云铠”,云安全版图再下一城
  8. python语言中内置的字符串排版方法_Python14之字符串(各种奇葩的内置方法)
  9. php mysql ajax 注册验证 实例_Ajax小实例   用户注册异步验证
  10. 如何用python“优雅的”调用有道翻译?
  11. 遇见Flask-Script
  12. curviloft插件怎么用_【su】插件及其功能图示
  13. 关于log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFa
  14. 深度学习制作自己的样本
  15. 乘风破浪 顺势而起 海比研究2020中国SaaS新锐企业TOP10重磅发布
  16. linux mysql搭建禅道详细教程_2019-08-28 redhat linux如何部署禅道服务器(一键安装包)...
  17. R语言 【integrate】函数
  18. mysql list dbs_关于mysql_list_dbs()函数的10篇文章推荐
  19. getcwd()和chdir()的用法 python
  20. 自动登录QQ空间 --- Selenium打开带有xpath-helper的chrom

热门文章

  1. springboot使用mongodb
  2. 支付宝支付-支付宝PC端扫码支付
  3. 6、Flutter Error waiting for a debug connection: ProcessException: adb did not report f(转)
  4. Android 数据解析——Gson与json
  5. java maven调用hbase
  6. linux系统登陆问题,Linux之登陆问题
  7. mysql 使用索引_mysql使用索引的注意事项
  8. 原来js的parseInt函数还可以这样用
  9. hive工作中分享总结
  10. GC算法 垃圾收集器