Android -- 自定义ImageView(圆形头像)

时间:2022-03-29 02:20:06

1.  原图

  aaarticlea/png;base64,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" alt="" />     --》    aaarticlea/png;base64,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" alt="" />

2.  自定义的控件类

package com.chaowen.yixin;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView; public class RoundedImageView extends ImageView { public RoundedImageView(Context context) {
super(context);
// TODO Auto-generated constructor stub
} public RoundedImageView(Context context, AttributeSet attrs) {
super(context, attrs);
} public RoundedImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
} @Override
protected void onDraw(Canvas canvas) { Drawable drawable = getDrawable(); if (drawable == null) {
return;
} if (getWidth() == 0 || getHeight() == 0) {
return;
}
Bitmap b = ((BitmapDrawable)drawable).getBitmap() ;
Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true); int w = getWidth(), h = getHeight(); Bitmap roundBitmap = getCroppedBitmap(bitmap, w);
canvas.drawBitmap(roundBitmap, 0,0, null); } public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) {
Bitmap sbmp;
if(bmp.getWidth() != radius || bmp.getHeight() != radius)
sbmp = Bitmap.createScaledBitmap(bmp, radius, radius, false);
else
sbmp = bmp;
Bitmap output = Bitmap.createBitmap(sbmp.getWidth(),
sbmp.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output); final int color = 0xffa19774;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight()); paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(Color.parseColor("#BAB399"));
canvas.drawCircle(sbmp.getWidth() / 2+0.7f, sbmp.getHeight() / 2+0.7f,
sbmp.getWidth() / 2+0.1f, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(sbmp, rect, rect, paint); return output;
} }

3.   使用控件

<com.chaowen.yixin.RoundedImageView
android:id="@+id/headImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="25.0dip"
android:adjustViewBounds="true"
android:maxHeight="80dip"
android:maxWidth="80dip"
android:src="@drawable/head_default_yixin" />

4.  ok  大功告成