博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义控件之圆形的image
阅读量:6230 次
发布时间:2019-06-21

本文共 2540 字,大约阅读时间需要 8 分钟。

需要添加点击事件的的时候在自定义的控件中覆写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 }

 

 

  效果如上图

转载于:https://www.cnblogs.com/zhaiyaohua/p/6111576.html

你可能感兴趣的文章
[CF919E]Congruence Equation
查看>>
Eclipse中绑定java源代码
查看>>
Hadoop学习笔记(1):WordCount程序的实现与总结
查看>>
Java IO最详解
查看>>
概率论 --- Uva 11181 Probability|Given
查看>>
nginx配置允许指定域名下所有二级域名跨域请求
查看>>
valgrind内存检测工具
查看>>
[论文泛读] Integrating human-services using WebComposition/UIX (PDT, 2011)
查看>>
mysql 以及在python中使用pymysql操作数据库
查看>>
VGDB提示
查看>>
关于错误error C4430 error C2365 error C2078 error C2440 error C2143的处理。
查看>>
背包问题
查看>>
Windows 7中使用Eclipse 使用CDT and WinGW 开发C/C++(转载)
查看>>
project修改时间日历
查看>>
kali 终端真透明
查看>>
具体数学第二版第四章习题(3)
查看>>
action继承actionSupport
查看>>
你真的会玩SQL吗?无处不在的子查询
查看>>
更新SVN时提示要清理,但清理失败,乱码得解决方案
查看>>
Rich控件一
查看>>