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

本文共 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

你可能感兴趣的文章
从输入 URL 到页面加载完成的过程中都发生了什么事情?
查看>>
实例讲解JQuery中this和$(this)区别
查看>>
centos 7 静态ip地址模板
查看>>
影响系统性能的20个瓶颈
查看>>
shell的详细介绍和编程(上)
查看>>
软件开发性能优化经验总结
查看>>
面试题编程题05-python 有一个无序数组,如何获取第K 大的数,说下思路,实现后的时间复杂度?...
查看>>
kendo grid序号显示
查看>>
Spring 教程(二) 体系结构
查看>>
Indexes
查看>>
2.Web中使用iReport 整合----------创建html格式的
查看>>
异常备忘:java.lang.UnsupportedClassVersionError: Bad version number in .class file
查看>>
最全三大框架整合(使用映射)——applicationContext.xml里面的配置
查看>>
初步理解Java的三大特性——封装、继承和多态
查看>>
知识点积累(一)
查看>>
iphone-common-codes-ccteam源代码 CCFile.m
查看>>
python:浅析python 中__name__ = '__main__' 的作用
查看>>
修改tomcat端口后不能IP访问问题
查看>>
review board
查看>>
URAL 1495 One-two, One-two 2
查看>>