Android 自定义圆角图片/头像
扫描二维码
随时随地手机看文章
之前多次做项目要用圆角图片都去网上找现成的。
今天想想不行,还是得自己学会,所以就自定义了一个,集成自ImageView,
效果如图:
代码如下:
import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.RectF; import android.graphics.drawable.BitmapDrawable; import android.util.AttributeSet; import android.widget.ImageView; import com.eccic.quicksolve_android.R; /** * Created by eccic on 17/1/3. */ public class RoundImageView extends ImageView { public RoundImageView(Context context) { this(context, null); } private float cornerRadius = -1; private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); public RoundImageView(Context context, AttributeSet attrs) { super(context, attrs); TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RoundImageView); for (int i = 0; i < typedArray.getIndexCount(); i++) { switch (typedArray.getIndex(i)) { case R.styleable.RoundImageView_cornerRadius: cornerRadius = typedArray.getDimension(R.styleable.RoundImageView_cornerRadius, cornerRadius); break; } } } @Override protected void onDraw(Canvas canvas) { if (cornerRadius < 0) cornerRadius = Math.min(getWidth(), getHeight()) * 0.5f; BitmapDrawable bitmapDrawable = (BitmapDrawable) getDrawable(); if (bitmapDrawable != null) { //步骤1:先生成一个bitmap,在bitmap上绘制原图 Bitmap bitmap = Bitmap.createBitmap(getWidth(),getHeight(), Bitmap.Config.ARGB_8888); Canvas bitmapCanvas = new Canvas(bitmap); bitmapDrawable.setBounds(0, 0, getWidth(), getHeight()); bitmapDrawable.draw(bitmapCanvas); //步骤2:生成圆形图片蒙版 Bitmap mask = Bitmap.createBitmap(getWidth(), getHeight(),Bitmap.Config.ARGB_8888); Canvas maskCanvas = new Canvas(mask); maskCanvas.drawRoundRect(new RectF(0, 0, getWidth(), getHeight()), cornerRadius, cornerRadius, paint); //步骤3:使用DST_IN的方式在原图的bitmap上绘制蒙版图 paint.reset(); paint.setFilterBitmap(false); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); bitmapCanvas.drawBitmap(mask, 0.0f, 0.0f, paint); //步骤4:将最后生成的这个bitmap绘制到View的canvas上 if (bitmap != null) { paint.setXfermode(null); canvas.drawBitmap(bitmap, 0.0f, 0.0f, paint); } } } }