# RegionDetector **Repository Path**: yarsnowing/RegionDetector ## Basic Information - **Project Name**: RegionDetector - **Description**: 一个支持灵活设置的不规则区域检测控件 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-10-30 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RegionDetector 一个支持灵活设置的不规则区域检测控件 --- ![image](https://github.com/huweijian5/RegionDetector/blob/master/screenshots/QQ%E6%88%AA%E5%9B%BE20170220173408.png) ![image](https://github.com/huweijian5/RegionDetector/blob/master/screenshots/device-2017-02-20-174131.mp4_1487584213.gif) ![image](https://github.com/huweijian5/RegionDetector/blob/master/screenshots/device-2017-02-20-174131.mp4_1487584269.gif) ![image](https://github.com/huweijian5/RegionDetector/blob/master/screenshots/device-2017-02-20-174131.mp4_1487584566.gif) --- ## 更新说明 > 1.1.0 * 去除反射 * 增加矢量图解析器,路径解析器 * 兼容到API27 --- ## 介绍说明 * 此控件支持不规则区域的识别监测,采用矢量图,有效降低内存,常用来做地图区域识别 * 支持手动点击模式和中心点定位模式 * 支持缩放位移操作 * 支持双击缩放操作 * 提供渐变动画,拒绝生硬 * 支持自定义矢量图,但需满足一定要求 * 开放众多接口满足个性化定制 * ... --- ## 原理介绍 [实现思路介绍](http://blog.csdn.net/huweijian5/article/details/78921793) --- ## 使用说明 * 布局xml中添加: ``` ``` * 设置激活区域: ```java int[] areaRes = new int[]{ R.string.china_anhui, R.string.china_beijing, R.string.china_guangdong , R.string.china_chongqing, R.string.china_xinjiang, R.string.china_fujian , R.string.china_gansu, R.string.china_zhejiang, R.string.china_yunnan , R.string.china_xizang, R.string.china_tianjin , R.string.china_shandong, R.string.china_heilongjiang, R.string.china_hainan }; binding.rdvDetect.setAreaActivateStatus(areaRes, true); ``` * 全部区域请查看: ``` 北京 天津 上海 重庆 河北 山西 辽宁 吉林 黑龙江 江苏 浙江 安徽 福建 江西 山东 河南 湖北 湖南 广东 海南 四川 贵州 云南 陕西 甘肃 青海 台湾 内蒙古 广西 西藏 宁夏 新疆 香港     ``` * 设置监听器: ``` binding.rdvDetect.setOnActivateRegionDetectListener(new RegionDetectSurfaceView.OnActivateRegionDetectListener() { @Override public void onActivateRegionDetect(String name) { binding.tvActivate.setText("高亮区域:" + name); binding.rdvDetect.setSelectedAreaOnlyCloseCenterLocation(name); } }); binding.rdvDetect.setOnRegionDetectListener(new RegionDetectSurfaceView.OnRegionDetectListener() { @Override public void onRegionDetect(String name) { binding.tvDetect.setText("当前区域:" + name); } }); binding.rdvDetect.setOnDoubleClickListener(new RegionDetectSurfaceView.OnDoubleClickListener() { @Override public void onDoubleClick(@RegionDetectSurfaceView.ScaleMode int scaleMode) { binding.tvZoom.setText("双击操作:" + (scaleMode == SCALE_ZOOMIN ? "放大" : "缩小")); } }); ``` * 至此最简单的引用方式已经结束了。 ### 常用api说明: > public void setRegionDetectMode(@RegionDetectMode int detectMode); * 可在此设置支持的模式为手动点击模式和中心定位模式 * 手动点击模式符合一般使用习惯,但区域较小时很难点击 * 中心定位模式则可以较细致的定位,推荐使用,默认也是此模式 --- > public void setCenterIcon(Bitmap bitmap); * 自定义中心定位图标 --- > public void setCenterIconLocationType(@CenterIconLocationType int locationType); * 设置中心定位图标的定位位置,支持图标中心和图标底部两种 --- > public void fitCenter(); * 将地图适合屏幕缩放并居中 --- > public void setAreaColor(@NonNull String areaName, @ColorInt int highlightColor, @ColorInt int activatedColor, @ColorInt int normalColor); * 设置区域高亮颜色,激活颜色和普通颜色 * 此设置优先级高于默认的颜色,如上图的广东会变成黄色 --- > public void setAreaMap(@DrawableRes int map, int originalWidth, int originalHeight); * 自定义区域地图 * 矢量图格式需要如下: ``` ...... ``` * 其中vector元素的viewportHeight和viewportWidth以及path元素的name和pathData必须设置 --- > 更多请详看在线文档或源码及参照demo --- ## JavaDoc文档 * [在线JavaDoc](https://jitpack.io/com/github/huweijian5/RegionDetector/1.0.0/javadoc/index.html) * 网址:`https://jitpack.io/com/github/huweijian5/RegionDetector/[VersionCode]/javadoc/index.html` * 其中[VersionCode](https://github.com/huweijian5/RegionDetector/releases)请替换为最新版本号 * 注意文档使用UTF-8编码,如遇乱码,请在浏览器选择UTF-8编码即可 --- ## 引用 * 如果需要引用此库,做法如下: * Add it in your root build.gradle at the end of repositories: ``` allprojects { repositories { ... maven { url "https://jitpack.io" } } } ``` * and then,add the dependecy: ``` dependencies { compile 'com.github.huweijian5:RegionDetector:latest_version' } ``` * 其中latest_version请到[releases](https://github.com/huweijian5/RegionDetector/releases)中查看 ## 注意 * 为了避免引入第三方库导致工程依赖多个版本的问题,如android support库 * 故建议在个人的工程目录下的build.gradle下加入以下变量,具体请看此[build.gradle](https://github.com/huweijian5/RegionDetector/blob/master/build.gradle) ``` ext{ minSdkVersion = 16 targetSdkVersion = 25 compileSdkVersion = 26 buildToolsVersion = '26.0.1' // App dependencies supportLibraryVersion = '26.1.0' junitVersion = '4.12' espressoVersion = '2.2.2' } ``` * 请注意,对于此库已有的变量,命名请保持一致