需要添加点击事件的的时候在自定义的控件中覆写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 * 这里我们继承ImageView23 * 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 @Override54 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 @Override68 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 }
效果如上图