最近在写画板程序,要判断一个点在一个闭合的path内或者是一个不规则的图形内,这个可不好解决网上查了一堆有算法云云的,直到看到一个大神的帖子 其实可以相当的简单几句话的是 核心代码:

//------关键部分 判断点是否在 一个闭合的path内--------//if(event.getAction()==MotionEvent.ACTION_DOWN){//构造一个区域对象,左闭右开的。  RectF r=new RectF();  //计算控制点的边界  mPath.computeBounds(r, true);  //设置区域路径和剪辑描述的区域  re.setPath(mPath, new Region((int)r.left,(int)r.top,(int)r.right,(int)r.bottom));  //判断触摸点是否在封闭的path内 在返回true 不在返回falseLog.e("","--判断点是否则范围内----"+re.contains((int)event.getX(), (int)event.getY()));}  

主要是用了 mPath.computeBounds(r, true);来计算边界 产生Region来判断

全部示例代码:

package com.example.touchtest;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.graphics.Region;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View; public class TestView extends View{ //----绘制轨迹----private float mX;  private float mY;   private final Paint mGesturePaint = new Paint();  private final Path mPath = new Path();  //------检测点是否在path内private boolean isDraw=false;Region re=new Region();public TestView(Context context, AttributeSet attrs) {super(context, attrs);mGesturePaint.setColor(context.getResources().getColor(android.R.color.holo_green_dark));mGesturePaint.setStyle(Paint.Style.STROKE); mGesturePaint.setStrokeWidth(4.0f);} public TestView(Context context) {super(context);mGesturePaint.setColor(context.getResources().getColor(android.R.color.holo_green_dark));mGesturePaint.setStyle(Paint.Style.STROKE); mGesturePaint.setStrokeWidth(4.0f);}@Overrideprotected void onDraw(Canvas canvas) {canvas.drawPath(mPath, mGesturePaint); } @Override  public boolean onTouchEvent(MotionEvent event)  {if(isDraw){//------关键部分 判断点是否在 一个闭合的path内--------//if(event.getAction()==MotionEvent.ACTION_DOWN){//构造一个区域对象,左闭右开的。  RectF r=new RectF();  //计算控制点的边界  mPath.computeBounds(r, true);  //设置区域路径和剪辑描述的区域  re.setPath(mPath, new Region((int)r.left,(int)r.top,(int)r.right,(int)r.bottom));  //在封闭的path内返回true 不在返回falseLog.e("","--判断点是否则范围内----"+re.contains((int)event.getX(), (int)event.getY()));}  return true;} switch (event.getAction())  {  case MotionEvent.ACTION_DOWN:   touchDown(event);break;  case MotionEvent.ACTION_MOVE:  touchMove(event);  break;case MotionEvent.ACTION_UP: mPath.close(); isDraw=true; break;}  //更新绘制  invalidate();  return true; } //---------------下边是划线部分----------------------------//  //手指点下屏幕时调用  private void touchDown(MotionEvent event)  {   //重置绘制路线,即隐藏之前绘制的轨迹  mPath.reset();  float x = event.getX();  float y = event.getY(); mX = x;  mY = y;    mPath.moveTo(x, y);  }   //手指在屏幕上滑动时调用  private void touchMove(MotionEvent event)  {  final float x = event.getX();  final float y = event.getY();   final float previousX = mX;  final float previousY = mY;   final float dx = Math.abs(x - previousX);  final float dy = Math.abs(y - previousY); //两点之间的距离大于等于3时,连接连接两点形成直线  if (dx >= 3 || dy >= 3)  {  //两点连成直线  mPath.lineTo(x, y);   //第二次执行时,第一次结束调用的坐标值将作为第二次调用的初始坐标值  mX = x;  mY = y;  }  }
}

运行

经测试可以很准确的判断 touch触摸点是否在上边绘制的不规则图形内,搞绘图的小伙伴们赶紧拿去开心的玩耍吧!哈哈

总结:技术是个不断积累的过程,对一个平台的熟悉程度决定了你的实现能力和快速解决问题的能力。万能的百度当然可以 但是也要有人去摸索分享出来 大家才能收益,感谢大神的分享精神 原文地址:http://blog.csdn.net/havakey/article/details/6649553 

不断学习不断积累,苦逼IT男的必由之路。

Android 判断一个点是否在封闭的Path内或不规则的图形内相关推荐

  1. Android判断一个点在不在多边形中

    有人问我,怎么判断一个点是不是在多边形内,本来想着把这个多边形分成一个又一个三角形,如图, 然后判断这个点是不是在某个三角形中,如果在,那就肯定在这个多边形中,那问题接下来就转化成判断这个点是不是在三 ...

  2. java 坐标系运算 判断一个地理坐标是否在电子围栏 圆、矩形、多边形区域内

    测试没问题,我用的是原始坐标:要注意的是坐标转换问题,要看当前是属于什么坐标系 经纬度与GCS(Geographic Coordinate System, 地理坐标系统) 平面坐标与PCS(Proje ...

  3. android判断一个控件是否获得光标,Android View获取焦点

    做项目的时候遇到一个bug,在一个Activity中打开DrawerLayout,这样就会遇到一个问题,在Activity中的EditText的焦点还在,这样根据项目中的代码逻辑数据就会同步不过来,这 ...

  4. Android判断一个Service是否运行

    来自陈显的博客http://www.cnblogs.com/chenxian/ /*** 判断给定名称的服务时候已经运行* @param context* @param serviceName* @r ...

  5. Android判断系统前后台应用和服务之ActivityManager

    在一个应用中,或一个Service .Receiver中判断一个应用是否正在运行,以便进行一些相关的处理. 这个时候我们需要得到一个ActivityManager,这个Manager顾名思意就是管理A ...

  6. android 经纬度的范围内,在Android里如何判断一个指定的经纬度点是否落在一个多边形区域内...

    在lbs开发中,可能要碰到这样的问题,如何判断一个指定的经纬度点是否落在一个多边形区域内,比如我在地图上画了一个多边形区域,然后给出一个经纬度点,怎样判断这个点是否在这个多边形范围之内,由于我用的是a ...

  7. android检测代码是否执行,Android如何判断一个应用在运行

    在一个应用中,或一个Service .Receiver中判断一个应用是否正在运行,以便进行一些相关的处理. 这个时候我们需要得到一个ActivityManager,这个Manager顾名思意就是管理A ...

  8. Android 如何判断一个应用在运行(转)

    Android 如何判断一个应用在运行  在一个应用中,或一个Service .Receiver中判断一个应用是否正在运行,以便进行一些相关的处理. 这个时候我们需要得到一个ActivityManag ...

  9. Android 如何判断一个应用在运行

    在一个应用中,或一个Service .Receiver中判断一个应用是否正在运行,以便进行一些相关的处理. 这个时候我们需要得到一个ActivityManager,这个Manager顾名思意就是管理A ...

最新文章

  1. verilog hdl数字集成电路设计原理与应用_数字IC设计经典书籍推荐
  2. 内存数据库MemSQL ——基于内存,MVCC+哈希表、跳表
  3. Silverlight 游戏开发小技巧:轨迹跟随效果
  4. SQL 语句快速参考
  5. html和css制作动漫岛,CSS动画
  6. 用C语言编写的简历,一份用C语言写的简历
  7. 浅谈 HTTPS 和 SSL/TLS 协议的背景与基础
  8. 一个请求在Struts2框架中的处理的步骤
  9. java中的DES,AES,BASE64,MD5和Cipher类\MessageDigest类
  10. 【react】 使用react 脚手架 创建项目
  11. python_open3d_Error: The DISPLAY environment variable is missing
  12. NumPy库---二元函数
  13. 柒微自动发卡系统源码
  14. 尚硅谷Vue2.0+Vue3.0全套教程视频笔记 + 代码 [P101-135]
  15. masm编译.asm文件报错fatal errorA1000: cannot open file
  16. 手机电脑浏览器抓取京东Cookies教程
  17. python调用gpu amd_TensorFlow通过AMD GPU加速(ROCm/Ubuntu 18.04)
  18. 华硕a550jk4200公版显卡驱动适配教程
  19. 嵌入式Linux--MYS-6ULX-IOT--总目录
  20. 超简洁WIN10桌面分享

热门文章

  1. 一个员工的离职成本到底有多恐怖!
  2. PVST的简单应用及其配置
  3. HTTP 简史 | Linux 中国
  4. JVAV——网络编程UDP/TCP
  5. 小程序毕业设计 基于微信汽车租赁租车小程序毕业设计开题报告功能参考
  6. [夜寂]Spring中Resource接口有关的实现
  7. 对Halting Problem的漂亮解释
  8. TWAIN扫描识别工具v16.2正式发布,添加了新的API
  9. 使用realsensed455修改分辨率问题
  10. 网页视频下载方法汇总