引子:
拍摄的照片,截图软件截的图,一般都是以矩形的形式呈现,然而很多时候android开发,需要做出一个圆形图像作为 用户的头像。
有两种方式可供选择,
1)直接使用androidSdk提供的RoundedBitmapDrawable.java类 对drawable设置圆角角度,可以生成圆形效果。
2)CircleImageView是github上 的 一个第三方开源项目,它提供了圆形图像的专业处理方法。
两者的区别如下:
1)RoundedBitmapDrawable 是通过设置圆角角度来造成圆形效果,所以它除了生成正圆效果,还能生成 圆角效果。这一点,CircleImageView做不到。
2)RoundedBitmapDrawable 不能直接定义边框效果(厚度,颜色等),但是CircleImageVIew可以。
示例:
RoundedBitmapDrawable:
layout.xml中:
1 <ImageView
2 android:id="@+id/imageView3"
3 android:layout_width="wrap_content"
4 android:layout_height="wrap_content"
5 android:padding="5dp"/>
java代码中:请重点看红色注释部分;
1 package com.example.myroundimageview;
2
3 import android.graphics.Bitmap;
4 import android.graphics.BitmapFactory;
5 import android.os.Bundle;
6 import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
7 import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
8 import android.support.v7.app.AppCompatActivity;
9 import android.widget.ImageView;
10
11 public class MainActivity extends AppCompatActivity {
12
13 @Override
14 protected void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.layout);
17
18 Bitmap src = BitmapFactory.decodeResource(getResources(), R.drawable.me);//1、取得图片资源的bitmap对象
19 Bitmap dst;//2、将长方形图片裁剪成正方形图片
20 if (src.getWidth() >= src.getHeight()) {// 所谓的裁剪,就是用Bitmap的create方法,指定宽高和源bitmap
21 dst = Bitmap.createBitmap(src, src.getWidth() / 2 - src.getHeight() / 2, 0, src.getHeight(), src.getHeight());
22 } else {
23 dst = Bitmap.createBitmap(src, 0, src.getHeight() / 2 - src.getWidth() / 2, src.getWidth(), src.getWidth());
24 }
25 //这样,就得到了一个方形的图
26 RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(getResources(), dst);// 3、再启用RoundedBitmapDrawable设置圆角和抗锯齿
27 roundedBitmapDrawable.setCornerRadius(dst.getWidth() / 2); //设置圆角半径为正方形边长的一半
28 roundedBitmapDrawable.setAntiAlias(true);//图片的裁剪通常会造成锯齿,这里要设置抗锯齿
29 ImageView image3 = (ImageView) findViewById(R.id.imageView3);//4、将处理之后的drawable对象设置到imageView中
30 image3.setImageDrawable(roundedBitmapDrawable);
31 }
32 }
CircleImageView:
在androidStudio中引用 它的库:
dependencies {
....
implementation 'de.hdodenhof:circleimageview:2.2.0'
}
在layout.xml中:
<de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/profile_image"
android:layout_width="96dp"
android:layout_height="96dp"
android:src="@drawable/itsme"
app:civ_border_color="@android:color/holo_green_dark"
app:civ_border_overlay="true"
app:civ_border_width="2dp"
app:civ_circle_background_color="@color/colorPrimaryDark"
app:civ_fill_color="@color/colorAccent"/>
至于这个CircleImageView的内部代码分析,这里留个位置,后面来填。
······