Android圆形图片或者圆角图片的快速实现
话不多说直接上code
xml文件布局
<LinearLayout
android:id="@+id/ll_headpict"
android:layout_width="match_parent"
android:layout_height="97dp"
android:layout_margin="13dp"
android:background="@drawable/shape_white_radius10_solid"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingLeft="25dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="头像"
android:textColor="@color/color4A4A4A"
android:textSize="14sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/iv_headpict"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginRight="37dp"
android:scaleType="fitXY"
android:src="@mipmap/ic_headview_demo" />
</LinearLayout>
初始化控件之后用工具类加载
//第一个参数上下文,第二个控件名称,第三个图片url地址,第四个参数圆角大小
ViewUtils.loadImageRadius(this, mIvpict, stringUrl, 15);//头像
ViewUtils.java工具类
/**
* Created by wjw on 2016/11/28
* 倒圆角工具类
*/
public class ViewUtils {
/**
* 图片加载
* @param context
* @param iv
* @param url
*/
public static void loadImage(Context context, ImageView iv, String url) {
if(null ==context || null==iv){
return;
}
if(Utils.isTxtEmpty(url)){
try {
Glide.with(context).load(R.mipmap.placeholder_icon) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL).into(iv);
}catch (Exception e){
}
}else {
try {
Glide.with(context).load(url) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL).placeholder(R.mipmap.placeholder_icon).into(iv);
} catch (Exception e) {
}
}
}
public static void loadImage(Context context, ImageView iv, int id) {
if(null ==context || null==iv){
return;
}
try {
Glide.with(context).load(id) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL).placeholder(R.mipmap.placeholder_icon).into(iv);
}catch (Exception e){
}
}
/**
* 本地图片
* @param context
* @param iv
* @param id
* @param radius
*/
public static void loadImage(Context context, ImageView iv, int id,int radius) {
if(null ==context || null==iv){
return;
}
try {
Glide.with(context).load(id) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL).
transform(new GlideRoundTransform(context, radius)).into(iv);
}catch (Exception e){
}
}
public static void setImageResource(ImageView iv, int id) {
if(null!=iv){
iv.setImageResource(id);
}
}
/**
* 加载网络图片(带圆角)
* @param context
* @param iv
* @param url
* @param radius
*/
public static void loadImageRadius(Context context, ImageView iv, String url, int radius) {
if(null ==context || null==iv){
return;
}
if(Utils.isTxtEmpty(url)){
try {
Glide.with(context).load(R.mipmap.placeholder_icon) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL).
transform(new GlideRoundTransform(context, radius)).into(iv);
}catch (Exception e){
}
}else{
try {
Glide.with(context).load(url) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL).
transform(new GlideRoundTransform(context, radius)).placeholder(R.mipmap.placeholder_icon).into(iv);
}catch (Exception e){
}
}
}
/**
* 加载网络图片(圆形)
* @param context
* @param iv
* @param url
*/
public static void loadImageCircle(Context context, ImageView iv, String url) {
if(null ==context || null==iv){
return;
}
if (Utils.isTxtEmpty(url)) {
try {
Glide.with(context).load(R.mipmap.placeholder_icon) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL).
transform(new GlideCircleTransform(context)).into(iv);
}catch (Exception e){
}
} else {
try {
Glide.with(context).load(url) .dontAnimate().diskCacheStrategy(DiskCacheStrategy.ALL).transform(new GlideCircleTransform(context)).
placeholder(R.mipmap.placeholder_icon).into(iv);
}catch (Exception e){
}
}
}
}
//圆形图片
public static class GlideCircleTransform extends BitmapTransformation {
public GlideCircleTransform(Context context) {
super(context);
}
@Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return circleCrop(pool, toTransform);
}
private Bitmap circleCrop(BitmapPool pool, Bitmap source) {
if (source == null)
return null;
int size = Math.min(source.getWidth(), source.getHeight());
int x = (source.getWidth() - size) / 2;
int y = (source.getHeight() - size) / 2;
Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);
Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);
if (result == null) {
result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
}
Canvas canvas = new Canvas(result);
Paint paint = new Paint();
paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
paint.setAntiAlias(true);
float r = size / 2f;
canvas.drawCircle(r, r, r, paint);
return result;
}
@Override
public String getId() {
return getClass().getName();
}
}
//圆角
public static class GlideRoundTransform extends BitmapTransformation {
private static float radius = 0f;
public GlideRoundTransform(Context context) {
this(context, 4);
}
public GlideRoundTransform(Context context, int dp) {
super(context);
this.radius = Resources.getSystem().getDisplayMetrics().density * dp;
}
@Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return roundCrop(pool, toTransform);
}
private static Bitmap roundCrop(BitmapPool pool, Bitmap source) {
if (source == null)
return null;
Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
if (result == null) {
result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
}
Canvas canvas = new Canvas(result);
Paint paint = new Paint();
paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
paint.setAntiAlias(true);
RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
canvas.drawRoundRect(rectF, radius, radius, paint);
return result;
}
@Override
public String getId() {
return getClass().getName() + Math.round(radius);
}
}
效果如图