Android自定义Drawable实现圆形头像

2015-05-30 06:08史琪锴盛萍萍
俪人·教师版 2015年18期
关键词:头像画笔圆心

史琪锴 盛萍萍

以前看到许多圆形头像是通过自定义ImageView来实现的,现在,只要自定义Drawable,几行代码即可实现效果:

代码如下:

public class RoundImageDrawable extends Drawable {

private Paint myPaint;

private Bitmap bitmap;

private int width;

public RoundImageDrawable(Bitmap bitmap){

this.bitmap=bitmap;

myPaint =new Paint();

BitmapShader bs =new BitmapShader(bitmap, TileMode.CLAMP, TileMode.CLAMP);//设置以何种方式重复

myPaint.setAntiAlias(true);

myPaint.setShader(bs);

//取寬高中较小的一个作为直径,当然为了防止OOM可以先用BitmapFactory.options解析一下压缩图片

width =Math.min(bitmap.getWidth(), bitmap.getHeight());

}

//注意不是自定义View,不是复写OnDraw()方法

@Override

public void draw(Canvas canvas) {

// TODO Auto-generated method stub

canvas.drawCircle(width/2, width/2,width/2, myPaint);

//这里是圆心和半径,并指定画笔

}

@Override

public int getIntrinsicWidth() {

// TODO Auto-generated method stub

return width;

}

@Override

public int getIntrinsicHeight() {

// TODO Auto-generated method stub

return width;

}

@Override

public void setAlpha(int alpha) {

// TODO Auto-generated method stub

myPaint.setAlpha(alpha);

}

@Override

public void setColorFilter(ColorFilter cf) {

// TODO Auto-generated method stub

myPaint.setColorFilter(cf);

}

@Override

public int getOpacity() {

// TODO Auto-generated method stub

return PixelFormat.TRANSLUCENT;

}

}

是不是很简单呢?用法更简单:

img=(ImageView) findViewById(R.id.image);

img.setImageDrawable(new RoundImageDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.资源ID)));

以后再想使用圆形头像再也不用使用第三方库了!

猜你喜欢
头像画笔圆心
二次曲线的一个类似圆心的性质
小画笔
小画笔
可爱的卡通头像
小画笔
以圆周上一点为圆心作圆的图的性质及应用
神奇的画笔
用钥匙画头像
中国第一张马列头像股票
四种方法确定圆心和半径