首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android -真实绘画和手指移动之间的距离

在Android中,要计算真实绘画和手指移动之间的距离,可以通过以下步骤进行:

1. 获取触摸事件的坐标

首先,你需要获取用户在屏幕上触摸时的坐标。这可以通过监听MotionEvent来实现。

代码语言:javascript
复制
@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_MOVE:
            float x = event.getX();
            float y = event.getY();
            // 处理坐标
            break;
    }
    return true;
}

2. 计算两点之间的距离

当用户移动手指时,你需要计算连续两个触摸点之间的距离。可以使用勾股定理来计算两点之间的直线距离。

代码语言:javascript
复制
private float calculateDistance(float x1, float y1, float x2, float y2) {
    return (float) Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
}

3. 实现连续距离计算

ACTION_MOVE事件中,你需要保存上一个点的坐标,并计算当前点和上一个点之间的距离。

代码语言:javascript
复制
private float lastX, lastY;

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            lastX = event.getX();
            lastY = event.getY();
            break;
        case MotionEvent.ACTION_MOVE:
            float currentX = event.getX();
            float currentY = event.getY();
            float distance = calculateDistance(lastX, lastY, currentX, currentY);
            // 处理距离,例如累加总距离
            lastX = currentX;
            lastY = currentY;
            break;
    }
    return true;
}

4. 示例:累加总距离

如果你想计算用户在屏幕上滑动的总距离,可以累加每次移动的距离。

代码语言:javascript
复制
private float totalDistance = 0;

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            lastX = event.getX();
            lastY = event.getY();
            break;
        case MotionEvent:**ACTION_MOVE**:
            float currentX = event.getX();
            float currentY = event.getY();
            float distance = calculateDistance(lastX, lastY, currentX, currentY);
            totalDistance += distance;
            lastX = currentX;
            lastY = currentY;
            break;
    }
    return true;
}

注意事项

  • 精度问题:由于屏幕分辨率和触摸精度的限制,计算出的距离可能会有轻微误差。
  • 性能考虑:频繁的计算可能会影响应用的性能,特别是在处理复杂的绘图操作时。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

相约1999:种面积关系和距离衰减之间的关系

很早之前就知道种面积关系(Species-Areare lationship, SAR)和距离衰减关系(Distance-Decay relationship, DDR)两者存在定量关系,是一直不知道公式是如何推导的...今天正好又看到一篇这样的文章,遂一探究竟。 本文公式太多,在编辑器中编辑非常不便,因此采用截图的方式呈现。...概念: 公式推导: Nature(2004)公式的来源为1999年一篇Oikos: 文章证明了在小尺度上(1 ~ 10 m),SAR参数可以独立估计;在大尺度上(1 ~ 104 m),参数z存在尺度依赖性...可以看到公式4虽然被后续广泛使用,但是其是有很多限制条件的。如要满足不同的A等大,z在D范围内不变,且需要是大尺度,即z(A)≠z(D2)。...而且公式中的z其实是z(D2),但是大家用的时候通常用的是采样范围内的z,即z(D)。 文章其他内容: 文章具体结果略过。 相关文章: 1.

98121
  • 伙计,是时候拉近你和【Spring】之间的距离了!

    使用 Spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能 Spring 是一个 IOC(DI) 和 AOP 容器框架....在 Spring 中可以使用 XML 和 Java 注解组合这些对象 一站式:在 IOC 和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库 (实际上 Spring 自身也提供了展现层的...SpringMVC 和 持久层的 Spring JDBC) Spring 核心模块: ?...可以指定多个名字,名字之间可用逗号、分号、或空格分隔 */ /** * 依赖注入的方式 * 1)属性注入 * 2)构造器注入 * 3)工厂方法注入(很少使用,不推荐) */ <!...Spring表达式语言(SpEL) Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言。

    45030

    自定义View学习——仿QQ消息气泡拖拽黏连删除

    该篇主要是对MessageBubbleView仿QQ消息控件的修改。因为我发现这个QQ消息气泡开源控件是规则的圆,所以稍加修改,对onDraw()绘画图形做了变动,更加接近于QQ气泡了。...参考博客:仿 QQ 未读消息气泡,可拖拽删除,粘连效果 参考博客中的实现思路: 首先我们需要两个圆,一个是在原点不需要跟随手指的圆,一个是跟随手指的圆,当用户开始点击时,绘制跟随手指的圆和圆上的未读消息数量...,同时在手指移动时,不停地判断两圆之间的距离是否超过我们所设定的最远距离,如果未超过这个距离,则在两圆之间,以两圆圆心的中间点为控制点绘制贝塞尔曲线,如果超过距离,则停止绘制贝塞尔曲线,两圆成独立状态移动...用户松开手指时,同样对两圆之间的距离进行判断,如在最远距离内,被拖动的圆自行回到原点,如超过最远距离,则在手指释放位置播放删除动画。 废话不多说,先看一下效果图: ?...0,baseline的上面为负值,baseline的下面为正值,即这里ascent为负值,descent为正值,比如ascent为-20 // ,descent为5,那需要移动的距离就是

    1.5K30

    微信小程序|Canvas实现绘画直线

    bindtouchstart EventHandle 手指触摸动作开始 bindtouchmove EventHandle 手指触摸后移动 bindtouchend EventHandle 手指触摸动作结束...bindtouchcancel EventHandle 手指触摸动作被打断,如来电提醒,弹窗 bindlongtap EventHandle 手指长按 500ms 之后触发,触发了长按事件后进行移动不会触发屏幕的滚动...x轴--->相对于画布左边的距离 strat_y = e.touches[0].y;// 手指开始触摸时的y轴 y轴--->相对于画布顶部的距离 }, //手指触摸结束时的事件...x轴 x轴--->相对于画布左边的距离 end_y = e.changedTouches[0].y;// 手指结束触摸时的y轴 y轴--->相对于画布顶部的距离 my_carvas.beginPath...x轴和y轴 my_carvas.lineTo(end_x,end_y) //绘制一条直线,终点坐标为手指触摸结束后的x轴和y轴 my_carvas.stroke() //画出当前路径的边框

    3.2K60

    找出临界点之间的最小和最大距离(链表)

    题目 链表中的 临界点 定义为一个 局部极大值点 或 局部极小值点 。 如果当前节点的值 严格大于 前一个节点和后一个节点,那么这个节点就是一个 局部极大值点 。...如果当前节点的值 严格小于 前一个节点和后一个节点,那么这个节点就是一个 局部极小值点 。 注意:节点只有在同时存在前一个节点和后一个节点的情况下,才能成为一个 局部极大值点 / 极小值点 。...给你一个链表 head ,返回一个长度为 2 的数组 [minDistance, maxDistance] ,其中 minDistance 是任意两个不同临界点之间的最小距离,maxDistance 是任意两个不同临界点之间的最大距离...第五个节点和第六个节点之间距离最小。minDistance = 6 - 5 = 1 。 第三个节点和第六个节点之间距离最大。maxDistance = 6 - 3 = 3 。...- [1,3,2,2,3,2,2,2,7]:第五个节点是一个局部极大值点,因为 3 比 2 和 2 大。 最小和最大距离都存在于第二个节点和第五个节点之间。

    72820

    android declare-styleable 和style,android – declare-styleable和style之间的区别

    大家好,又见面了,我是你们的朋友全栈君。 我认为将属性声明为不是风格,只有以下区别。...在其他地方,我已经看到说明“blahblah”必须是使用这些属性的自定义视图类的名称,并且您需要使用命名空间来引用布局XML中的自定义属性。但似乎没有必要。...风格与非风格之间的区别似乎是: >您可以在“style.xml”声明中使用样式属性。...>自定义类的构造函数需要以不同的方式读取样式和非样式的属性:使用getsStyledAttributes()的样式属性,以及具有attr.getAttributeValue()或类似属性的非风格属性。...在我在Web上看到的大多数教程和示例中,只使用了getsStyledAttributes()。但是,这不适用于直接在布局中声明的属性,而不使用样式。

    53630

    Android开发(19) 使用adb建立pc和android设备之间的连接

    想建立pc和手机之间的同步,我们需要依托adb来实现。我们看看adb是什么?...adb是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备(如G1手机)....它的主要功能有:   * 运行设备的shell(命令行)   * 管理模拟器或设备的端口映射   * 计算机和设备之间上传/下载文件   * 将本地apk软件安装至模拟器或...在服务里启动监听服务,我们需要监听来自某个端口的消息,这个端口是手机和pc之间的同路。由于android 设备的特点,我们需要用java nio来实现监听,以提高性能。...3.实现监听服务里的消息响应,根据具体的业务需要,完成和pc之间的消息响应。

    1.5K00

    android移动点餐系统内容和要求,基于Android云计算的移动点餐系统

    大家好,又见面了,我是你们的朋友全栈君。 摘 要:系统发挥Android 富有创造力和想象力的云应用开发,实现一套Android 客户端软件和完善的后台服务功能来完成点餐功能。...所谓移动互联网就是将移动通信和互联网整合在一起,是移动设备(包括手机和上网本)可以随时随地访问互联网资源和应用。 云是由许多水分子组成的,几乎有几亿个。云没有中央控制,基本上可以随风吹向各处。...智能手机是移动互联网时代一个标志性的客户端工具,具有强大的移动云计算和储存能力,可以通过移动通信网络来实现无线网络接入,从而实现各种各样的富有创造力和想象力云应用。...后台数据库采用JDBC 访问远程MySQL 数据库,Android 客户端的一部分数据同时存储在Android 本地的SQLite 数据库和后台MySQL 数据库中,实现Android 客户端和后台数据库的数据同步技术...2 系统实现 Android 云计算之移动点餐系统功能模块实现每个功能模块实现说明: ①系统的登录功能:系统用户输入用户名和密码,实现登录,进入系统主菜单。

    1K30

    一个真实的企业移动终端市场:谁在用?机会和挑战?

    移动信息化研究中心近日将发布《2016年移动终端(中小企业)研究报告》显示,移动终端设备正在进入主流的企业市场,但仍然面临安全问题。...有一点毫无疑问的,随着移动互联网热潮的来袭,移动终端在企业级市场仍然保持着高速增长的态势,BYOD也越来越成为企业应用常态。...以下是移动信息化研究中心(MIRC)的报告中的一些数据亮点,方便大家快速了解企业移动终端的发展现状: 一、企业规模分布情况 本次调研有效样本量1671个。...四、多类型的移动设备加入办公大军 随着物联网在企业中的渗透,越来越来多的终端设备涌入企业办公市场。 ?...六、移动端终已深入到企业的各个部门 ? 七、智能手机应用于企业办公疲态显露,平板迎来黄金元年 从移动信息化研究中心连续三年的监测表明,智能手机应用于办公出现明显的下滑趋势,而平板电脑渐受青睐。 ?

    696100

    可拖拽gridview

    和Runnable来实现一个定时器,假如定时时间为1000毫秒,在1000毫秒内,如果手指抬起了移除定时器,没有抬起并且手指点击在GridView的item所在的区域,则表示我们长按了GridView的...item 如果我们长按了item则隐藏item,然后使用WindowManager来添加一个item的镜像在屏幕用来代替刚刚隐藏的item 当我们手指在屏幕移动的时候,更新item镜像的位置,然后在根据我们移动的...X,Y的坐标来获取移动到GridView的哪一个位置 到GridView的item过多的时候,可能一屏幕显示不完,我们手指拖动item镜像到屏幕下方,要触发GridView想上滚动,同理,当我们手指拖动...mPoint2ItemTop 手指按下的点到该Item的上边缘的距离,如上图的1号线 mPoint2ItemLeft 手指按下的点到该Item的左边缘的距离,如上图的2号线 mOffset2Top  DragGridView...,我注释掉的逻辑是直接将5和7的数据交换,而后面的那种逻辑是将6的位置数据移动到5,将7的位置移动到6,然后再7显示5  6->5, 7->6, 5->7不知道大家理解了没有。

    4.9K50

    Android滑动菜单特效实现,仿人人客户端侧滑效果,史上最简单的侧滑实现

    初始化的时候将菜单布局向左偏移,以至于能够完全隐藏,这样内容布局就会完全显示在Activity中。然后通过监听手指滑动事件,来改变菜单布局的左偏移距离,从而控制菜单布局的显示和隐藏。原理图如下: ?...,计算出移动的距离,来调整menu的leftMargin值,从而显示和隐藏menu xMove = event.getRawX(); int distanceX = (int) (xMove...如果手指移动距离大于屏幕的1/2,或者手指移动速度大于SNAP_VELOCITY, * 就认为应该滚动将menu展示出来。...如果手指移动距离加上menuPadding大于屏幕的1/2, * 或者手指移动速度大于SNAP_VELOCITY, 就认为应该滚动将content展示出来。...在onTouch事件里面,根据手指滑动的距离会改变菜单布局的左偏移量,从而控制菜单布局的显示和隐藏。

    2.9K100

    切换按钮-自定义控件-拖动效果

    是手指第一次触摸屏幕 事件为MotionEvent.ACTION_MOVE是手指在屏幕上移动 事件为MotionEvent.ACTION_UP是手指离开屏幕 当手指触摸到屏幕 定义手指最后的坐标lastX...调用MotionEvent对象的getX() 方法,得到lastX的值 当手指在屏幕上移动 定义手指横向移动的距离dis 调用getX()-lastX就是移动的距离 定义滑动按钮的左边就是这个移动的距离...判断slideBtnLeft位于合理的位置,0到背景图的宽度-滑动按钮的宽度 调用invalidate()方法,刷新视图 onClick事件和onTouchEvent是有冲突 定义一个标志isDrag...变量,如果有拖动发生,就把这个变量赋值true 在onCllick()方法里面对这个变量进行判断 当手指抬起的时候 判断当前slideBtnLeft来确定当前按钮是开还是关的状态 slideBtnLeft...比较 maxLeft的一半就能判断当前状态 package com.tsh.myswitchbtn; import android.content.Context; import android.graphics.Bitmap

    1.3K20

    Android 仿美团悬浮购物车显示隐藏

    ://手指抬起 整体的思路就是在滑动过程中,购物车图标向右位移,并加一个渐变效果。...向右移动的距离计算:屏幕的宽度减去图标距左边的宽度(红线),然后加上图标的半径(蓝线) 布局 <?xml version="1.0" encoding="utf-8"?..._1, titles)); 计算移动距离 //控件绘制完成之后再获取其宽高 mIvCart.getViewTreeObserver().addOnGlobalLayoutListener...ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { //动画移动的距离...然后用一个定时器timer延时执行动画 在手指抬起的时候记录当前时间戳,并执行动画 moveDistance就是计算的移动的距离 isShowFloatImage是一个布尔类型的标识,判断图标状态是否显示

    1K20

    Android实现图片滚动控件,含页签功能,让你的应用像淘宝一样炫起来

    ,计算出移动的距离,来调整左侧布局的leftMargin值,从而显示和隐藏左侧布局 xMove = event.getRawX(); int distanceX = (int) (xMove...* * @return 当前leftMargin的值在leftEdge和rightEdge之间返回true,否则返回false。...如果手指移动的距离是正数,则认为当前手势是想要滚动到上一个菜单元素。 * * @return 当前手势想滚动到上一个菜单元素返回true,否则返回false。...如果手指移动距离大于屏幕的1/2,或者手指移动速度大于SNAP_VELOCITY, * 就认为应该滚动到下一个菜单元素。...如果手指移动距离大于屏幕的1/2,或者手指移动速度大于SNAP_VELOCITY, * 就认为应该滚动到上一个菜单元素。

    23010

    用 Java 做个“你画手机猜”的安卓小游戏

    它的实现得益于深度学习模型在其中的应用,通过深度神经网络的归纳,曾经令人头疼的绘画识别也变得易如反掌。现如今,只要使用一个简单的图片分类模型,我们便可以轻松的实现绘画识别。...在我们的情况下,我们需要定义下面三种时间响应: touchStart:感应触碰时触发 touchMove:当用户在屏幕上移动手指时触发 touchUp:当用户抬起手指时触发 与此同时,我们用 paths...paths.add(path); path.reset(); path.moveTo(x, y); this.x = x; this.y = y; } 3.2.3 手指移动...(touchMove) 在手指移动中,我们会持续记录坐标点然后将它们构成一个 quadratic bezier....通过一定的误差阀值来动态优化用户的绘画动作。只有差别超出误差范围内的动作才会被记录下来。

    1.7K20
    领券