首页 > 代码库 > 自定义控件之圆形的image

自定义控件之圆形的image

需要添加点击事件的的时候在自定义的控件中覆写OnTouchEvent();方法进行点击事件的分发

 1 package com.example.administrator.mvp.ui.widget;
 2 import android.content.Context;
 3 import android.graphics.Bitmap;
 4 import android.graphics.BitmapFactory;
 5 import android.graphics.Canvas;
 6 import android.graphics.Color;
 7 import android.graphics.Paint;
 8 import android.graphics.Path;
 9 import android.graphics.PixelFormat;
10 import android.graphics.Rect;
11 import android.graphics.Region;
12 import android.graphics.drawable.BitmapDrawable;
13 import android.graphics.drawable.Drawable;
14 import android.util.AttributeSet;
15 import android.view.View;
16 import android.widget.ImageView;
17 
18 import com.example.administrator.mvp.R;
19 
20 
21 /**
22  * 这里我们继承ImageView
23  * Created by Zyh on 2016/11/27.
24  */
25 public class MyCycleImageView extends View {
26     /**
27      *方法的作用:
28      * 构造方法--主要进行变量的初始化
29      * onMeasure---主要对该控件的宽高进行重置
30      * onDraw---对需要显示的信息进行重绘
31      * 我们需要用到的工具:
32      * 1.画笔
33      * 2.位图
34      * 3.绘制的path路线
35      * 4.画布,这个有系统提供
36      * 
37      */
38     private Bitmap mBitmap;
39     private Paint mPaint;
40     private Path mPath;
41     private int dia;//显示的直径
42     public MyCycleImageView(Context context, AttributeSet attrs) {
43         //这个方法是系统默认要执行的方法
44         super(context, attrs);
45         mPaint=new Paint();
46         //设置抗锯齿
47         mPaint.setAntiAlias(true);
48         mPaint.setStyle(Paint.Style.STROKE);
49         //设置画笔透明
50         mPaint.setAlpha(0);
51         mPath=new Path();
52     }
53     @Override
54     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
55         //重新规定布局的宽和高
56         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
57         //图片的直径我们规定为宽高中最小的那个尺寸
58         dia=Math.min(MeasureSpec.getSize(widthMeasureSpec),MeasureSpec.getSize(heightMeasureSpec));
59         //按比例创建位图
60         mBitmap=Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(), R.mipmap.chazhuo),dia,dia,false);
61         //设置路径为直径是dia的圆
62         mPath.addCircle(dia/2,dia/2,dia/2, Path.Direction.CW);
63         //这个方法是重新定义宽高的时候必须要执行的方法,否则会有异常
64         setMeasuredDimension(dia,dia);
65     }
66 
67     @Override
68     protected void onDraw(Canvas canvas) {
69          //重新绘制控件
70          super.onDraw(canvas);
71          //绘制圆形的区域--可以为我们位图描边
72          canvas.drawPath(mPath,mPaint);
73          //按照路径裁剪画布,裁剪剩下的区域我们设置为交集
74          canvas.clipPath(mPath, Region.Op.INTERSECT);
75          canvas.drawBitmap(mBitmap,0,0,null);
76     }
77 }

 

 技术分享

  效果如上图

自定义控件之圆形的image