使用RoundedBitmapDrawable快速生成圆角和圆形图片

Bertha 。 2022-07-16 05:48 309阅读 0赞

原文出处:http://www.tuicool.com/articles/eIBbArA

上一篇 《[Material Design]使用Palette类提取图片的颜色信息》 主要介绍了如何提取图片的一些特定颜色,不过如果你稍微注意一下,你会发现Demo示意图还有个小细节那就是图片列表的图片都是圆角的,那么今天就来说说如何快速生成圆角或者圆形图片。

这里写图片描述

在今年I/O大会之前,如果要实现圆角或者圆形图片可以自定义View,比如之前的博文 《Android 自定义UI View - 03 圆形图片控件》 或者通过一些第三方库来实现,比如下面这个:

  • RoundedImageView by vinc3m1

但是在I/O大会之后,Google发布了新的Support lib,其中有一个是 RoundedBitmapDrawable 类,通过这个类可以很容易实现圆角和圆形图片。

可以直接在上一个工程的基础上修改部分代码实现,具体实现步骤如下:

1、首先需要添加support-v4依赖

在build.gralde的dependencies中添加下面代码:

  1. dependencies {
  2. //...其他依赖
  3. compile 'com.android.support:support-v4:21.+'
  4. compile 'com.android.support:appcompat-v7:21.+'
  5. compile 'com.android.support:support-v4:21.+'
  6. }

添加完成后需要同步一下Gradle,同步成功后就可以使用RoundedBitmapDrawable类。

2、创建RoundedBitmapDrawable对象

生成圆角图片:

  1. Bitmap src = BitmapFactory.decodeResource(getResources(), imageId); //获取Bitmap图片
  2. RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(getResources(), src); //创建RoundedBitmapDrawable对象
  3. roundedBitmapDrawable.setCornerRadius( 100 ); //设置圆角半径(根据实际需求)
  4. roundedBitmapDrawable.setAntiAlias( true ); //设置反走样
  5. image.setImageDrawable(roundedBitmapDrawable); //显示圆角图片

生成圆角图片只需要根据图片大小设置合理的圆角半径即可,效果如下:

这里写图片描述

生成圆形图片
由于 RoundedBitmapDrawable 类没有直接提供生成圆形图片的方法,所以生成圆形图片首先需要对原始图片进行裁剪,将图片裁剪成正方形,最后再生成圆形图片,具体实现如下:

  1. Bitmap src = BitmapFactory.decodeResource(getResources(), imageId);
  2. Bitmap dst;
  3. //将长方形图片裁剪成正方形图片
  4. if (src.getWidth() >= src.getHeight()){
  5. dst = Bitmap.createBitmap(src, src.getWidth()/ 2 - src.getHeight()/ 2 , 0 , src.getHeight(), src.getHeight()
  6. );
  7. } else {
  8. dst = Bitmap.createBitmap(src, 0 , src.getHeight()/ 2 - src.getWidth()/ 2 , src.getWidth(), src.getWidth()
  9. );
  10. }
  11. RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(getResources(), dst);
  12. roundedBitmapDrawable.setCornerRadius(dst.getWidth() / 2 ); //设置圆角半径为正方形边长的一半
  13. roundedBitmapDrawable.setAntiAlias( true );
  14. image.setImageDrawable(roundedBitmapDrawable);

这样通过简单的转换就可以将图片裁剪成圆形图片效果如下:

这里写图片描述

更多关于RoundedBitmapDrawable方法可以参考官方API文档。

参考:

RoundedBitmapDrawable API

Google I/O 2014 – What’s New In Android

发表评论

表情:
评论列表 (有 0 条评论,309人围观)

还没有评论,来说两句吧...

相关阅读