本文是摘抄自 这篇文章,此处作为记录,以备后期查阅使用。在此感谢原文作者的贡献。

使用recyclerview显示如下所示的列表,其中item是一个自定义六边形view,点击事件会有重叠情况,所以需要在自定义view中判断,点击事件是否在六边形绘制区域。

PolygonItemView的初始化

    private void initData() {//初始化外边框的画笔mOuterPaint = new Paint(Paint.ANTI_ALIAS_FLAG);mOuterPaint.setStyle(Paint.Style.STROKE);mOuterPaint.setStrokeWidth(mOuterWidth);mOuterPaint.setColor(mOuterColor);//初始化内侧的画笔mInnerPaint = new Paint(Paint.ANTI_ALIAS_FLAG);mInnerPaint.setStyle(Paint.Style.FILL_AND_STROKE);mInnerPaint.setColor(mInnerColor);//判断点击事件是否在范围内的regionmRegion = new Region();//绘制正六边形的pathmViewPath = new Path();}

在初始化的过程中,主要初始化各类的绘制参数,包括画笔,已经绘制路径的path,和判断其是否在点击区域内的Region。

绘制正六边形

    /*** 绘制多边形*/public void lineMultShape(int count) {if (count < POLYGON_COUNT) {return;}mViewPath.reset();for (int i = 0; i < count; i++) {//当前角度int angle = 360 / count * i;if (i == 0) {mViewPath.moveTo(mCenterX + mRadius * MathUtil.cos(angle), mCenterY + mRadius * MathUtil.sin(angle));} else {mViewPath.lineTo(mCenterX + mRadius * MathUtil.cos(angle), mCenterY + mRadius * MathUtil.sin(angle));}}mViewPath.close();}

看了这样图,就可以很好的画出正六边形了,将360度分成6分,然后( mCenterX + R*cos α ,mCenterY + R * sinα)就是正六边形的每个端点的坐标,在用Path依次将其连接就可以了。

判断点击区域

其实自定义View,主要解决的是点击区域重合的问题,这里应该在dispatchTouchEvent()中拦截掉事件,然后判断其点击区域是否在正六边形内,来解决点击重合。

    @Overridepublic boolean dispatchTouchEvent(MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_DOWN) {if (!isEventInPath(event)) {return false;}}return super.dispatchTouchEvent(event);}
    /*** 判断是否在多边形内** @param event* @return*/private boolean isEventInPath(MotionEvent event) {RectF bounds = new RectF();//计算Path的边界mViewPath.computeBounds(bounds, true);//将边界赋予Region中mRegion.setPath(mViewPath, new Region((int) bounds.left, (int) bounds.top,(int) bounds.right, (int) bounds.bottom));//判断 当前的触摸点是否在这个范围内return mRegion.contains((int) event.getX(), (int) event.getY());}

判断自定义异形view的点击事件是否在绘制区域内相关推荐

  1. 在XML布局里给View设置点击事件

    给一个View设置监听点击事件是再普通不过的事情,比如 view.setOnClickListener(onClickListener); 另外一种做法是直接在XML布局里面指定View点击时候的回调 ...

  2. view.performClick()触发点击事件

    1.主要作用 自动触发控件的点击事件 2.界面的布局文件  activity_main.xml <RelativeLayout xmlns:android="http://schema ...

  3. Android之BaseQuickAdapter(3.0.4版本)给子view添加点击事件(helper.addOnClickListener(view))的函数没了

    1.问题 用BaseQuickAdapter给子view添加点击事件,以前都是在适配器里面这么写的helper.addOnClickListener(view),现在这个函数没了 2.解决办法 直接在 ...

  4. android:performClick的用法——自定义View增加点击事件更配performClick噢!

    文章目录 浅析 如何使用 模拟点击事件 配合自定义View 浅析 performClick 官方注释 Call this view's OnClickListener, if it is define ...

  5. 给View 添加手势,点击无反应 如何给View添加点击事件,手势方法

    项目中有很多地方需要添加点击事件,重复代码很多,所以做了一个UIView的分类,专门做点击事件使用. 项目地址:UIView-Tap 代码很简单,主要有一点就是注意分类不能直接添加属性,需要用到运行时 ...

  6. 自定义cell中自定义的button的点击事件

    为什么80%的码农都做不了架构师?>>>    1 当自定义cell中有控件button时,由于系统cell的点击事件的优先级高于button的点击事件的优先级,因此,点击butto ...

  7. Vue.js 极简小例:读值、样式调用、if判断、a 标签、点击事件、管道

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 写法: <template><div id="app"& ...

  8. 高德地图去掉定位按钮_高德地图自定义定位按钮及点击事件

    最近使用了一下高德地图,使用期间将出现的问题记录一下.文中出现不对的地方,悉听各路大神指正.2018年11月23日15:59:46 1.首先我们初始化map控制对象aMap .if (aMap ==n ...

  9. 【Echarts图例点击事件】自定义Echarts图例legend点击事件(已解决)

    目录 先睹为快(效果) 1.实现Echarts多条曲线 2.点击echarts触发接口请求 2.1 先默认隐藏部分数据 2.2 自定义legend图例点击事件 3.源码下载地址(解压即用) **[写在 ...

最新文章

  1. MySQL数据库分组和聚合函数组合使用
  2. python htmltestrunner报告_Python HTMLTestRunner可视化报告实现过程解析
  3. 增强现实、语音合成、深度学习……这款有15年历史的产品,竟然藏了这么多技术...
  4. 正则表达式在JS中的应用
  5. Python数据分析之画图力气pyecharts 制作3D图像!
  6. leetcode - 764. 最大加号标志
  7. 这些标点符号你真的会输入吗
  8. 我毕业一年后。生活的艰辛。我的程序人生该怎么走
  9. SparkSQL案例-图书信息分析
  10. 显示日历信息的命令 cal 和 ncal
  11. 风云再续:他抖任他抖,IO诊断在我手
  12. 【exp-linux】用aplay直接播放音频文件(mp3,wav)
  13. java代码实现端口是否ping通
  14. 腾讯浏览器支持html5视频播放器,JS第8款:html5media.js跨浏览器兼容的HTML5视频音频播放器...
  15. 笔记 | 制作windows10装机U盘,换固态硬盘,加内存条
  16. 中移动浦发联合发布四款产品 ,NFC手机年底上市
  17. 信誉管理软件的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. 概括TTL、RS32、RS485特点及区别
  19. Android 各版本演变特性整理
  20. hive问题-return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask

热门文章

  1. 添加SearchView控件时飘红的问题
  2. 测试人员如何区分前端和后台BUG方法流程
  3. @PostConstruct与afterPropertiesSet
  4. 应Oracle BEA定下每股21美元收购价
  5. android rgmap,Android版的数字地质填图系统开始应用测试
  6. android首页广告倒计时,(安卓APP)简单的首页广告倒计时实现代码
  7. 【每日一练】56—CSS实现一款实用的响应式卡片悬停效果
  8. Android开发经验
  9. 致敬!烈日下的测绘者,请为他们点赞!
  10. 程序员必备的软技能-金字塔原理拆解(上)