Touch事件与TouchSlop

前置知识:坐标系统知识

package com.ifredomer.touchandclickimport android.annotation.SuppressLint
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.MotionEvent
import android.view.ViewConfiguration
import android.widget.Button
import android.widget.TextViewclass MainActivity : AppCompatActivity() {var touchPointMarginLeft = 0.0fvar touchPointMarginTop = 0.0fvar startX = 0.0fvar startY = 0.0f@SuppressLint("ClickableViewAccessibility")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val btn = findViewById<Button>(R.id.btn)val infoTv = findViewById<TextView>(R.id.info_tv)btn.setOnTouchListener { v, event ->when (event?.action) {MotionEvent.ACTION_DOWN -> {//算出点击点到控件边框的距离touchPointMarginLeft = event.rawX - v.xtouchPointMarginTop = event.rawY - v.ystartY = event.rawYstartX = event.rawXinfoTv.text ="ACTION_DOWN x = ${v.x}  y = ${v.y} rawX = ${event.rawX} rawY = ${event.rawY}"}MotionEvent.ACTION_MOVE -> {v.animate()//控件的x坐标 = rawx - touchPointMarginLeft.x(event.rawX - touchPointMarginLeft)//控件的y坐标 = rawy - touchPointMarginLeft.y(event.rawY - touchPointMarginTop).setDuration(0).start();infoTv.text ="ACTION_MOVE x = ${v.x}  y = ${v.y} rawX = ${event.rawX} rawY = ${event.rawY}"}MotionEvent.ACTION_UP -> {infoTv.text = "ACTION_UP"//滑动的距离val offsetX = event.rawX - startXval offsetY = event.rawY - startY//获取最小滑动距离val touchSlop = ViewConfiguration.get(baseContext).scaledTouchSlop//算出以直角三角形算出斜边距离var distance: Double =kotlin.math.sqrt((offsetY * offsetY + offsetX * offsetX).toDouble())if (distance > touchSlop) {infoTv.text = "ACTION_UP Move"} else {infoTv.text = "ACTION_UP Click"}}}//True 消耗掉事件,false继续往下传递true}}
}

运行效果:

七、如何区分点击与滑动相关推荐

  1. 在Android中区分点击和滑动操作

    最近在写一个图片浏览安卓应用,想要弄成全屏显示,只在单击时显示工具栏和状态栏,在触摸滑动时翻页.经过几个小时在互联网上的搜索也没找到合适的例子. 知道Android Studio的模板里有一个全屏的模 ...

  2. pc 端与移动端区分点击与拖拽事件

    pc 端与移动端区分点击与拖拽事件 PC 端 移动端 在 html 的应用中,拖拽事件为 mousedown -> mousemove -> mouseup 三个事件组成,在一个有拖拽事件 ...

  3. android 增加触摸范围,android seekBar 增加点击和滑动范围

    seekBar的的范围有限,有时候设计师要求高度为4dp,此时范围太小,很难滑动成功.因此,我们需要在不改变 UI 的前提下,增加点击和滑动范围. 直接上代码: public class MainAc ...

  4. android模拟点击滑动,模拟Android的view点击和滑动监听

    一,简单形式的 /*模拟Android中的view 点击和滑动监听 * */ public class View { private OnClickListener onClickListener; ...

  5. ADB模拟点击、滑动事件

    ADB 模拟点击.滑动事件 方案一:使用input子系统 1.adb shell input tap position_x position_y tap模拟点击事件 position_x 为点击的横坐 ...

  6. Android 模拟点击、滑动、返回

    懒惰使人进步.一点都没错,我就是那个懒惰的人. 文章目录 项目实现功能 使用方法 功能演示 技术分析 项目实现功能 可以模拟用户操作 点击 滑动 返回功能. 使用方法 安装apk,首次安装后引导至 开 ...

  7. 移动端模拟导航可点击自动滑动

    移动端模拟导航可点击自动滑动 0.1.4. 导航可左右滑动,可点击边缘的一个,自动滚动下一个到可视范围[依赖于iscroll.js]. 废话不多说直接上代码: /** 移动端模拟导航可点击自动滑动 0 ...

  8. 直播视频app源码,自定义可点击可滑动的通用RatingBar

    直播视频app源码,自定义可点击可滑动的通用RatingBar实现的相关代码 绘制ratingbar 绘制未选中的背景 /*** 未选中Bitmap*/ private val starBgBitma ...

  9. 点击缓慢滑动返回顶部

    点击缓慢滑动返回顶部 返回顶部组件是一种极其常见的网页功能,需求简单:页面滚动一定距离后,显示返回顶部的按钮,点击该按钮可以将滚动条滚回至页面开始的位置. 使用setinerval实现缓慢返回顶部 / ...

最新文章

  1. 《白话法律42讲》读后感
  2. 软考已报名可以更改科目吗
  3. c++ createtoolhelp32snapshot取进程路径_Linux进程间通信(上)之管道、消息队列实践
  4. python元组 字符串 字典 习题+总结
  5. 大剑无锋之HTTP连接、Tcp三次握手四次挥手、Tcp状态
  6. 迪普科技高端防火墙规模应用于海关总署 提供整网安全防护
  7. myeclipse8.5安装反编译工具
  8. 记录---基于BigDecimal的特殊的四舍五入
  9. css 回到首页按钮,js+css实现回到顶部按钮(back to top)
  10. quickpcb添加pcb库_南京阿勒勾电子 quickpcb2005详细步骤教程
  11. 人人都需要专利的原因
  12. Information Retrieval --- Classification
  13. 项目管理相关的考试认证及证书价值介绍
  14. px和毫米的换算_px与厘米换算(px怎么转换为cm)
  15. 计算机等级考试 设置表格居中,Word表格水平居中怎么设置
  16. Android短信验证码控件,Android中实现短信验证码自动填入
  17. torchvision学习笔记之transforms
  18. 小路工作室GHOST XP 2007典藏版(完美XP)
  19. 《聪明人用方格笔记本》读书笔记
  20. 图论 —— 染色法判断二分图

热门文章

  1. MCG格式监控录像数据恢复软件 1.0
  2. ubuntu18.04 (melodic)cartographer安装(详细)
  3. Keysight公司B2961A型电源直流电压输出测试
  4. 在学校计算机如何退出老师控制,电脑怎么退出老师控制
  5. 以前学习C语言资料2
  6. linux 内核 fork,Linux fork()一个进程内核态的变化
  7. 致远项目管理SPM系统之HSE管理概述
  8. 【致远FAQ】静态资源缓存不足
  9. 使用python在excel表格中增加新的sheet表
  10. 三毛作品集——在线阅读