七、如何区分点击与滑动
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}}
}
运行效果:
七、如何区分点击与滑动相关推荐
- 在Android中区分点击和滑动操作
最近在写一个图片浏览安卓应用,想要弄成全屏显示,只在单击时显示工具栏和状态栏,在触摸滑动时翻页.经过几个小时在互联网上的搜索也没找到合适的例子. 知道Android Studio的模板里有一个全屏的模 ...
- pc 端与移动端区分点击与拖拽事件
pc 端与移动端区分点击与拖拽事件 PC 端 移动端 在 html 的应用中,拖拽事件为 mousedown -> mousemove -> mouseup 三个事件组成,在一个有拖拽事件 ...
- android 增加触摸范围,android seekBar 增加点击和滑动范围
seekBar的的范围有限,有时候设计师要求高度为4dp,此时范围太小,很难滑动成功.因此,我们需要在不改变 UI 的前提下,增加点击和滑动范围. 直接上代码: public class MainAc ...
- android模拟点击滑动,模拟Android的view点击和滑动监听
一,简单形式的 /*模拟Android中的view 点击和滑动监听 * */ public class View { private OnClickListener onClickListener; ...
- ADB模拟点击、滑动事件
ADB 模拟点击.滑动事件 方案一:使用input子系统 1.adb shell input tap position_x position_y tap模拟点击事件 position_x 为点击的横坐 ...
- Android 模拟点击、滑动、返回
懒惰使人进步.一点都没错,我就是那个懒惰的人. 文章目录 项目实现功能 使用方法 功能演示 技术分析 项目实现功能 可以模拟用户操作 点击 滑动 返回功能. 使用方法 安装apk,首次安装后引导至 开 ...
- 移动端模拟导航可点击自动滑动
移动端模拟导航可点击自动滑动 0.1.4. 导航可左右滑动,可点击边缘的一个,自动滚动下一个到可视范围[依赖于iscroll.js]. 废话不多说直接上代码: /** 移动端模拟导航可点击自动滑动 0 ...
- 直播视频app源码,自定义可点击可滑动的通用RatingBar
直播视频app源码,自定义可点击可滑动的通用RatingBar实现的相关代码 绘制ratingbar 绘制未选中的背景 /*** 未选中Bitmap*/ private val starBgBitma ...
- 点击缓慢滑动返回顶部
点击缓慢滑动返回顶部 返回顶部组件是一种极其常见的网页功能,需求简单:页面滚动一定距离后,显示返回顶部的按钮,点击该按钮可以将滚动条滚回至页面开始的位置. 使用setinerval实现缓慢返回顶部 / ...
最新文章
- 《白话法律42讲》读后感
- 软考已报名可以更改科目吗
- c++ createtoolhelp32snapshot取进程路径_Linux进程间通信(上)之管道、消息队列实践
- python元组 字符串 字典 习题+总结
- 大剑无锋之HTTP连接、Tcp三次握手四次挥手、Tcp状态
- 迪普科技高端防火墙规模应用于海关总署 提供整网安全防护
- myeclipse8.5安装反编译工具
- 记录---基于BigDecimal的特殊的四舍五入
- css 回到首页按钮,js+css实现回到顶部按钮(back to top)
- quickpcb添加pcb库_南京阿勒勾电子 quickpcb2005详细步骤教程
- 人人都需要专利的原因
- Information Retrieval --- Classification
- 项目管理相关的考试认证及证书价值介绍
- px和毫米的换算_px与厘米换算(px怎么转换为cm)
- 计算机等级考试 设置表格居中,Word表格水平居中怎么设置
- Android短信验证码控件,Android中实现短信验证码自动填入
- torchvision学习笔记之transforms
- 小路工作室GHOST XP 2007典藏版(完美XP)
- 《聪明人用方格笔记本》读书笔记
- 图论 —— 染色法判断二分图