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

效果如上图

自定义控件之圆形的image的更多相关文章

  1. 自定义控件之 圆形 / 圆角 ImageView

    一.问题在哪里? 问题来源于app开发中一个很常见的场景——用户头像要展示成圆的:       二.怎么搞? 机智的我,第一想法就是,切一张中间圆形透明.四周与底色相同.尺寸与头像相同的蒙板图片,盖在 ...

  2. Android - 自定义控件之圆形控件

    自定义控件 - 圈圈 Android L: Android Studio 效果:能够自定义圆圈半径和位置:设定点击效果:改变背景颜色 下面是demo图 点击前: 点击后: 自定义控件一般要继承View ...

  3. 自定义控件【圆形】圆角 BitmapShader

    关于缩放比例         本例中,我们会为BitmapShader设置了一个matrix,目的是按比例放大或者缩小bitmap,并移动到View控件的中心,我们不会让view的宽高大于我们bitm ...

  4. 自定义控件之圆形颜色渐变进度条--SweepGradient

    前几天在群里面有人找圆形可颜色渐变进度条,其中主要的知识点是SweepGradient: mSweepGradient = new SweepGradient(240, 360, new int[] ...

  5. Android自定义控件之圆形进度条ImageView

    From:http://blog.csdn.net/xiadik/article/details/41648181package com.wangran.beautiful_girl_show.vie ...

  6. Android 自定义控件之圆形扩散View(DiffuseView)

    实现效果 使用 属性方法 代码 源码下载 参考链接 实现效果 使用 XML中: <com.airsaid.diffuseview.widget.DiffuseView android:id=&q ...

  7. 美发帮--android APP开发实战

    登陆界面,LinearLayout  ImageView  Button   用到了ImageView自动缩放,和自定义Button形状及State-Drawable,还用到了动画. 自定义控件之圆形 ...

  8. 自定义控件之--继承控件(圆形TextView)

    师从郭大,自学于心,继承控件无疑就是继承自现有控件,保持继承的控件的属性并进行必要的扩展.   比如下面这个自定义控件,它就保持了TextView的属性,并对TextView的外观进行必要的修改该来适 ...

  9. Android自定义控件系列之应用篇——圆形进度条

    一.概述 在上一篇博文中,我们给大家介绍了Android自定义控件系列的基础篇.链接:http://www.cnblogs.com/jerehedu/p/4360066.html 这一篇博文中,我们将 ...

随机推荐

  1. Android获取短信验证码

    Android开发中关于短息验证码的设计层出不穷,越来越多的应用为了更好的提高软件的安全性,开始使用通过服务器向用户发送验证码的方式,来保护用户个人信息的安全性.无论是用户注册时的信息验证还是当用户发 ...

  2. flat network 原理与配置 - 每天5分钟玩转 OpenStack(86)

    flat network 是不带 tag 的网络,要求宿主机的物理网卡直接与 linux bridge 连接,这意味着: 每个 flat network 都会独占一个物理网卡. 上图中 eth1 桥接 ...

  3. (第七天)DOM练习一

    动态删除元素 给定一个ul列表,点击ul中子节点进行删除 window.onload = function() { ].childNodes; () console.log(list.length); ...

  4. iframe跨域+

    script.image.iframe的src都不受同源策略的影响.所以我们可以借助这一特点,实现跨域.如前面所介绍的JSONP跨域,以及灯标(Beacons). 该篇随笔主要阐述iframe结合一些 ...

  5. Hibernate学习之——Hibernate环境搭建

    之前在写关于安卓闹钟的教程,写了一半就没后一半了,其实自己也没做好,在校外实习,校内毕业实习又有任务,只能先放放了,等毕业实习结束之后,在继续安卓闹钟开发之旅,相信这个时间不会很久的.现在毕业实习用到 ...

  6. 条形码的应用三-----------从Excel文件中读取条形码

    条形码的应用三------从Excel文件中读取条形码 介绍 上一篇文章,我向大家展示了生成多个条形码并存储到Excel文件中的一个方法.后来我又有了个想法:既然条码插入到excel中了,我可不可以从 ...

  7. html标签属性(attribute)和dom元素的属性(property)

    简介 attribute和property都有属性之意,但对于attribute和property的区分其实并不难.从对象来说,attribute是html文档上标签属性, 而property则是对应 ...

  8. DocX在C#中的基本操作方法

    用了一个星期把园子里2016年中有关.net的文章都看了,有些只是大致的看了一下,在看的同时也在记录一些通用的方法.发现有很多对NPOI的文档,主要是操作Excl的方法,却很少有关文档类型的方法. 在 ...

  9. opengl 读取3ds(stl)文件

    没有解决: mark 几个网站: 1 http://blog.csdn.net/icebergkevin/article/details/18974235 能实现二维的 2 http://www.cn ...

  10. STM32Cube Uart_DMA测试工程

    1.打开软件,新建工程,选择芯片信号,这里选择 2.USART1使能选择"Asynchronous"模式:            3.配置"RCC",High ...