史琪鍇 盛萍萍
以前看到許多圓形頭像是通過自定義ImageView來實現(xiàn)的,現(xiàn)在,只要自定義Drawable,幾行代碼即可實現(xiàn)效果:
代碼如下:
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);//設(shè)置以何種方式重復(fù)
myPaint.setAntiAlias(true);
myPaint.setShader(bs);
//取寬高中較小的一個作為直徑,當(dāng)然為了防止OOM可以先用BitmapFactory.options解析一下壓縮圖片
width =Math.min(bitmap.getWidth(), bitmap.getHeight());
}
//注意不是自定義View,不是復(fù)寫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)));
以后再想使用圓形頭像再也不用使用第三方庫了!