import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.Shader; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.shapes.OvalShape; import android.util.AttributeSet; import android.widget.ImageView; /** * 圆形背景ImageView */ public class CircleImageView extends ImageView { private BitmapShader bitmapShader = null; private Bitmap bitmap = null; private ShapeDrawable shapeDrawable = null; private int width = 0; private int height = 0; public CircleImageView(Context context) { super(context); } public CircleImageView(Context context, AttributeSet attrs) { super(context, attrs); } public CircleImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onDraw(Canvas canvas) { width = getWidth(); height = getHeight(); bitmap = ((BitmapDrawable) getDrawable()).getBitmap(); // 从新生成指定大小的图片 bitmap = Bitmap.createScaledBitmap(bitmap, width, height, true); // 构造渲染器BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.MIRROR, Shader.TileMode.REPEAT); // 将图片裁剪为椭圆形 // 构建ShapeDrawable对象并定义形状为椭圆 shapeDrawable = new ShapeDrawable(new OvalShape()); // 获得画笔并设置渲染器 shapeDrawable.getPaint().setShader(bitmapShader); // 设置显示区域 shapeDrawable.setBounds(0, 0, width, height); // 绘制shapeDrawable shapeDrawable.draw(canvas); } }