自定义控件之自定义圆形头像


        自定义头像在app应用中应用较为广泛,定义一个类,继承ImageView,重写三个有参构造


   public class Image extends ImageView {

   Paint paint;

    private Drawable drawable;

    public Image(Context context) {
        super(context);
    }

    public Image(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public Image(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onDraw(Canvas canvas) {
         //获得图片资源
        Drawable drawable = getDrawable();
       if (null!=drawable){
           //获得图片
           Bitmap bitmap=((BitmapDrawable)drawable).getBitmap();

           Bitmap b=getRoundRextBitmap(bitmap);
           /**
            * 0,0,表示离里面的b的距离,左边距离和上边距离
            *   canvas.drawBitmap(b,rectSrc,rectDest,paint);
            */

           canvas.drawBitmap(b,0,0,null);

       }else{
           super.onDraw(canvas);
       }

    }

    public Bitmap getRoundRextBitmap(Bitmap bitmap){

        //得到控件的宽高
        int width=getWidth();
        int height=getHeight();


        //取圆角正方形的边长,取屏幕边长的最短边

        int r=width>height?width:height;

       //矩形显示需要创建一个新图片,然后放在画布上,否则无法操作画布
        Bitmap background=Bitmap.createBitmap(width,height, Bitmap.Config.ARGB_8888);

        Canvas canvas=new Canvas(background);

        paint=new Paint();
        paint.setAntiAlias(true);
        paint.setColor(Color.WHITE);

        //画圆
       canvas.drawCircle(getWidth()/2,getHeight()/2,width/2,paint);

         //设置正方形,左上右下


        RectF rect=new RectF(0,0,r,r);
        // 设置当两个图形相交时的模式,SRC_IN为取SRC图形相交的部分,多余的将被去掉
       paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));

         //使图片和矩形交叉
       canvas.drawBitmap(bitmap,null,rect,paint);

        return background;
    }

}



         //具体使用部分

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Image im= (Image) findViewById(R.id.im);
        //处理图片
        Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.mipmap.a);

        im.setImageBitmap(bitmap);
    }
}


//xml中引用自定义控件即可


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值