android自定义可缩放,移动图像裁剪框

2023-11-08

在实际项目中,经常要制作一个简易的图像裁剪功能,即获取一张图片,并用一个遮罩层选择目标范围并截取保存的功能,如下图所示:


在此分享下该自定义视图的制作过程。

需求说明

整一个视图包含一个透明的遮罩层,一个透明带白色边框的矩形。要实现的功能是:

  • 点击矩形框外围:无任何响应
  • 点击矩形框内部:可随手指移动而移动
  • 点击矩形框的4个顶点:可进行对角顶点坐标不变的情况下的矩形的缩放,同时边框变色

下面是实现该功能的完整源码

/**
 * Created by Farble on 2015/3/10.
 */
public class PhotoCropView extends View {
    private static final String TAG = "PhotoCropView";

    private onLocationListener locationListener;/*listen to the Rect */
    private onChangeLocationlistener changeLocationlistener;/*listening position changed */

    private int MODE;
    private static final int MODE_OUTSIDE = 0x000000aa;/*170*/
    private static final int MODE_INSIDE = 0x000000bb;/*187*/
    private static final int MODE_POINT = 0X000000cc;/*204*/
    private static final int MODE_ILLEGAL = 0X000000dd;/*221*/

    private static final int minWidth = 100;/*the minimum width of the rectangle*/
    private static final int minHeight = 200;/*the minimum height of the rectangle*/

    private static final int START_X = 200;
    private static final int START_Y = 200;

    private static final float EDGE_WIDTH = 1.8f;
    private static final int ACCURACY= 15;/*touch accuracy*/

    private int pointPosition;/*vertex of a rectangle*/

    private int sX;/*start X location*/
    private int sY;/*start Y location*/
    private int eX;/*end X location*/
    private int eY;/*end Y location*/

    private int pressX;/*X coordinate values while finger press*/
    private int pressY;/*Y coordinate values while finger press*/

    private int memonyX;/*the last time the coordinate values of X*/
    private int memonyY;/*the last time the coordinate values of Y*/

    private int coverWidth = 300;/*width of selection box*/
    private int coverHeight = 400;/*height of selection box*/

    private Paint mPaint;
    private Paint mPaintLine;
    private Bitmap mBitmapCover;
    private Bitmap mBitmapRectBlack;
    private PorterDuffXfermode xfermode;/*paint mode*/

    public PhotoCropView(Context context) {
        super(context);
        init();
    }

    public PhotoCropView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    pu
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android自定义可缩放,移动图像裁剪框 的相关文章

随机推荐

  • 刷脸识别改变支付零售日常生活

    据对相貌特征信息的生物辨认技能促就了刷脸付的诞生 并且付宝官方力推刷脸付旨在替代了扫码付出 当然新型的刷脸付款方式关于很多人仍是比较忧虑的 觉得会存在必定安全隐患 那么刷脸付安全吗 有保证吗 那么下面就来解答大家所忧虑的刷脸付安全性问题 早
  • webpack打包入口指定某文件夹内所有js作为入口文件

    webpack config js webpack config js const path require path const glob require glob module exports 指定 packs 文件夹下的 js 文件作
  • Navicat连接MySQL时弹出:1045:Access denied for user ‘root’@’localhost’

    错误原因 当登录MySQL数据库出现 Error 1045 错误时 表明你输入的用户名或密码错误被拒绝访问了 也可能是你的账号不允许从远程登录 只能在localhost本地登录数据库 解决办法如下 用管理员权限打开cmd 并且cd进入mys
  • 点云读取加速c++ ASCii 模式ply 或者txt

    相较于Qt Qtextstream的性能提升十倍 本文点云格式特殊 有需要自行修改即可 QFile dataFile fileName bool ret dataFile open QIODevice ReadOnly QIODevice
  • 浅谈JS的微任务和宏任务(附加面试题)

    Event Loop 因为JS是单线程 就是说 同一个时间只能做一件事 为了协调事件 用户交互 脚本 UI 渲染和网络处理等行为 防止主线程的不阻塞 Event Loop 的方案应用而生 掌握知识点 JS分为同步任务和异步任务 同步任务都在
  • (C语言)指针初识(1)——指针概念及指针类型

    指针 看似是一个令人头疼的问题 静下心来慢慢学习 指针这个主题 分成了几个的板块 比较多 耐心看完 一定会有收获啦 慢慢来 总是需要一个循序渐进的过程 目录 一 什么是指针 二 指针和指针类型 指针类型的意义 结论1 结论2 一 什么是指针
  • vue 和 react的对比

    vue 比react的优缺点 对比1 github 全球开发者星星点赞数量 此数据结果摘取于 2021年3月份 结论 vue 胜出 尤雨溪一个人撑起一个生态 战胜高手林立的巨头公司facebook 相当的传奇 对比2 React VS Vu
  • easyrecovery2023永久免费版激活密钥,手把手教您用EasyRecovery快速恢复数据

    Ontrack EasyRecovery Crack Professional是一个全面的备份和恢复实用程序 可以从多个数据丢失事件中恢复文件 例如常见的意外删除 更严重的 有时是病毒引起的 分区或驱动器格式化 甚至硬盘严重损坏后的数据丢失
  • 阿里Java代码规范

    代码规范 一 编程规约 一 命名风格 二 常量定义 三 代码格式 四 OOP 规约 五 集合处理 六 并发处理 七 控制语句 八 注释规约 九 其它 二 异常日志 一 异常处理 二 日志规约 三 单元测试 四 安全规约 五 MySQL 数据
  • YAML用法详解

    1 简介 YAML YAML Ain t Markup Language j m l 设计目标是方便人类读写 它实质上是一种通用的数据串行化格式 远比 JSON 格式方便 1 1 它的基本语法规则如下 大小写敏感 使用缩进表示层级关系 缩进
  • Spring Cloud之LB-Ribbon调用流程和源码分析(二)

    接着上面的一篇关于Spring Cloud之Open Feign调用流程和源码分析 解析feign在rpc调用的时候lb的组成及底层工作流程 关键组件介绍 ServerList 可以响应客户端的特定服务的服务器列表 ServerListFi
  • python多进程multiprocessing使用,看这篇就够了(二)

    1 上篇都是直接创建Process对象来创建子进程 其实还可以通过继承来创建子进程 来看看Process源码 可以通过承继Process 重写run方法来启动子进程 因为对一个不包括target属性 即当target None时 的Proc
  • C语言栈与队列知识,C语言数据结构基础学习笔记——栈和队列

    之前我们学过了普通的线性表 接下来我们来了解一下两种特殊的线性表 栈和队列 栈是只允许在一端进行插入或删除的线性表 栈的顺序存储结构也叫作顺序栈 对于栈顶指针top 当栈为空栈时 top 1 当栈为满栈时 top MaxSize 1 顺序栈
  • html当鼠标离开时触发事件,html中在鼠标指针移动到元素外时触发的事件属性onmouseout...

    实例 当鼠标指针移动到图像之外时执行一段 JavaScript 浏览器支持 IE Firefox Chrome Safari Opera 所有主流浏览器都支持 onmouseout 属性 定义和用法 onmouseout 属性在鼠标指针移动
  • C++实现——任意进制之间的转换

    include
  • 独孤九剑第七式-物以类聚 人以群分(K-means模型)

    文章适合于所有的相关人士进行学习 各位看官看完了之后不要立刻转身呀 期待三连关注小小博主加收藏 小小博主回关快 会给你意想不到的惊喜呀 各位老板动动小手给小弟点赞收藏一下 多多支持是我更新得动力 文章目录 前言 K means模型讲解 K
  • sparkstreaming读取文件读取不到数据

    今天用了下sparkstreaming读取hdfs文件或本地目录文件 发现文件内容一直不会被处理 使用了下面两种方法都不行 阅读源码并开启DEBUG后发现 textFileStream后面也是调用fileStream方法 并且newFile
  • make时遇到File `Makefile' has modification time 4e+04 s in the future的解决办法

    1 原因 是虚拟机时间和电脑时间不匹配造成 2 解决办法 在VMware 菜单虚拟机 M gt 设置 S gt 选项下设置开启时间同步 然后重启虚拟机 3 若还出现 warning Clock skew detected Your buil
  • 对Unity中的欧拉角的理解

    前言 欧拉角对人来说是十分直观的 很适合人机交互中 但不适用于插值和迭代 在说到欧拉角时有两点非常重要 旋转方式和旋转顺序 旋转方式 首先要区分每次旋转是绕固定轴旋转的 还是绕旋转之后的轴旋转的 绕固定轴旋转就是旋转过程中XYZ轴不变 绕旋
  • android自定义可缩放,移动图像裁剪框

    在实际项目中 经常要制作一个简易的图像裁剪功能 即获取一张图片 并用一个遮罩层选择目标范围并截取保存的功能 如下图所示 在此分享下该自定义视图的制作过程 需求说明 整一个视图包含一个透明的遮罩层 一个透明带白色边框的矩形 要实现的功能是 点