android-圆形头像

引子:

  拍摄的照片,截图软件截的图,一般都是以矩形的形式呈现,然而很多时候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的内部代码分析,这里留个位置,后面来填。

······

原文地址:https://www.cnblogs.com/hankzhouAndroid/p/8973937.html