android 滑动过程 触发,android 代码实现模拟用户点击、滑动等操作

/**

* 模拟用户点击

*

* @param view 要触发操作的view

* @param x 相对于要操作view的左上角x轴偏移量

* @param y 相对于要操作view的左上角y轴偏移量

*/

private static void analogUserClick(View view, float x, float y) {

if (view == null) {

return;

}

LogUtil.e(TAG_POINT, "正在模拟点击操作:p->" + x + "," + y);

long downTime = SystemClock.uptimeMillis();//模拟按下去的时间

long eventTime = downTime;//事件发生时间

MotionEvent downEvent = MotionEvent.obtain(downTime, eventTime,

ACTION_DOWN, x, y, 0);

view.onTouchEvent(downEvent);

eventTime = eventTime + 90;//离开屏幕时间

MotionEvent upEvent = MotionEvent.obtain(downTime, eventTime,

MotionEvent.ACTION_UP, x, y, 0);

view.onTouchEvent(upEvent);

//回收事件

downEvent.recycle();

upEvent.recycle();

}

/**

* 模拟用户滑动操作

*

* @param view 要触发操作的view

* @param type 模拟操作类型:均匀滑动、快速滑动

* @param p1x 滑动的起始点x坐标

* @param p1y 滑动的起始点y坐标

* @param p2x 滑动的终点x坐标

* @param p2y 滑动的终点y坐标

*/

private static void analogUserScroll(View view, final int type, final float p1x, final float p1y, final float p2x, final float p2y) {

LogUtil.e(TAG_POINT, "正在模拟滑屏操作:p1->" + p1x + "," + p1y + ";p2->" + p2x + "," + p2y);

if (view == null) {

return;

}

long downTime = SystemClock.uptimeMillis();//模拟按下去的时间

long eventTime = downTime;

float pX = p1x;

float pY = p1y;

int speed = 0;//快速滑动

float touchTime = 116;//模拟滑动时发生的触摸事件次数

//平均每次事件要移动的距离

float perX = (p2x - p1x) / touchTime;

float perY = (p2y - p1y) / touchTime;

boolean isReversal = perX < 0 || perY < 0;//判断是否反向:手指从下往上滑动,或者手指从右往左滑动

boolean isHandY = Math.abs(perY) > Math.abs(perX);//判断是左右滑动还是上下滑动

if (type == USER_TOUCH_TYPE_1) {//加速滑动

touchTime = 10;//如果是快速滑动,则发生的触摸事件比均匀滑动更少

speed = isReversal ? -20 : 20;//反向移动则坐标每次递减

}

//模拟用户按下

MotionEvent downEvent = MotionEvent.obtain(downTime, eventTime,

ACTION_DOWN, pX, pY, 0);

view.onTouchEvent(downEvent);

//模拟移动过程中的事件

List moveEvents = new ArrayList<>();

boolean isSkip = false;

for (int i = 0; i < touchTime; i++) {

pX += (perX + speed);

pY += (perY + speed);

if ((isReversal && pX < p2x) || (!isReversal && pX > p2x)) {

pX = p2x;

isSkip = !isHandY;

}

if ((isReversal && pY < p2y) || (!isReversal && pY > p2y)) {

pY = p2y;

isSkip = isHandY;

}

eventTime += 20.0f;//事件发生的时间要不断递增

MotionEvent moveEvent = getMoveEvent(downTime, eventTime, pX, pY);

moveEvents.add(moveEvent);

view.onTouchEvent(moveEvent);

if (type == USER_TOUCH_TYPE_1) {//加速滑动

speed += (isReversal ? -70 : 70);

}

if (isSkip) {

break;

}

}

//模拟手指离开屏幕

MotionEvent upEvent = MotionEvent.obtain(downTime, eventTime,

MotionEvent.ACTION_UP, pX, pY, 0);

view.onTouchEvent(upEvent);

//回收触摸事件

downEvent.recycle();

for (int i = 0; i < moveEvents.size(); i++) {

moveEvents.get(i).recycle();

}

upEvent.recycle();

}

原文:http://www.cnblogs.com/agilezhu/p/7196940.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507665.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国内计算机类APP相关竞赛总结

中国高校计算机大赛–移动应用创新赛 http://www.appcontest.net/ 中国高校计算机大赛—移动应用创新赛”旨在促进高校计算机课程教学内容和教学方法改革&#xff0c;激发学生创新意识&#xff0c;提升学生利用计算机分析问题、解决问题的能力&#xff0c;特别是移动应用的设计…

flink 写kafka_flink消费kafka的offset与checkpoint

生产环境有个作业&#xff0c;逻辑很简单&#xff0c;读取kafka的数据&#xff0c;然后使用hive catalog&#xff0c;实时写入hbase&#xff0c;hive&#xff0c;redis。使用的flink版本为1.11.1。为了防止写入hive的文件数量过多&#xff0c;我设置了checkpoint为30分钟。env.…

论文阅读:超高分辨率图像中快速、准确的条码检测

摘要 由于目标对象的尺度不同&#xff0c;超高分辨率 (UHR) 图像中的对象检测长期以来一直是计算机视觉中的一个具有挑战性的问题。在条码检测方面&#xff0c;将 UHR 输入图像调整为更小的尺寸通常会导致相关信息的丢失&#xff0c;而直接处理它们的效率很高且计算成本很高。…

android 多线程 场景,精选Android初中级面试题 (三): 深探Handler,多线程,Bitmap

码个蛋(codeegg) 第 930 次推文作者&#xff1a;Focusing链接&#xff1a;https://juejin.im/post/5c85cead5188257c6703af47Handler1、谈谈消息机制Handler作用 &#xff1f;有哪些要素 &#xff1f;流程是怎样的 &#xff1f;参考回答&#xff1a;负责跨线程通信&#xff0c;…

python计算bmi的编程_Python学习-计算BMI的小程序

示例&#xff1a;小明身高1.75&#xff0c;体重80.5kg。请根据BMI公式(体重除以身高的平方)帮小明计算他的BMI指数&#xff0c;并根据BMI指数&#xff1a;低于18.5&#xff1a;过轻18.5-25&#xff1a;正常25-28&#xff1a;过重28-32&#xff1a;肥胖高于32&#xff1a;严重肥…

通过超分辨率重构来提高二维码的对比度

1 问题描述 &#xff08;1&#xff09;图像分辨率小。例如一些嵌入在海报&#xff08;如图1&#xff09;或远距离拍摄的码&#xff0c;其分辨率远小于通常情况下的码图像。 图1.海报中的二维码占比很小 &#xff08;2&#xff09;图像质量较低。有很多是经过了多次的压缩和转…

android web 访问数据库,Web下的JDBC访问数据库的基本步骤

Web下的JDBC访问数据库的基本步骤(2012-06-02 12:09:33)在Java程序中连接数据库的一般步骤分为一下几部分&#xff0c;我摘录出来&#xff0c;跟大家分享。(1)将数据库的JABC驱动加载到classpath中&#xff0c;在基于JavaEE的Web应用开发过程中&#xff0c;通常把JDBC驱动放在W…

linux 磁盘扩容_记录一次ESXi Linux在线扩容,不重启系统

因为工作需要&#xff0c;需要将运行在ESXi主机上面的一台Centos 里面的一个LV卷进行扩容&#xff0c;下面记录了此次扩展的详细过程&#xff0c;整个过程&#xff0c;不需要重启服务器。1. 首先通过df-h 查看当前磁盘结构如下&#xff1a;我们此次的最终目标&#xff0c;就是将…

我目前的主要研究方向

推荐系统 https://blog.csdn.net/search_129_hr/article/details/118680185 游戏难度动态调整 https://blog.csdn.net/search_129_hr/article/details/119204173 睡眠声音识别与增强 https://blog.csdn.net/search_129_hr/article/details/118568452 二维码图像识别与增强…

linux的任务计划6,Linux计划任务

Linux计划任务&#xff1a;未来的某个时间执行一次任务&#xff0c;或者周期性执行某个任务&#xff0c;执行结果会通过邮件通知定时任务&#xff1a;at batch周期性任务&#xff1a;crontab系统任务调度&#xff1a;/ect/crontab用户任务调度&#xff1a;/var/spool/cronmail​…

aws python lambda_python – AWS Lambda发送HTTP请求

这可能是一个简单回答的问题,但我似乎无法弄明白.背景&#xff1a;我有一个python Lambda函数来获取数据库中的更改,然后使用HTTP将json中的更改发布到URL.我正在使用urllib2这样&#xff1a;# this runs inside a loop, in reality my error handling is much betterrequest …

标签分布学习相关研究

1 标记增强及标签分布学习 https://mp.weixin.qq.com/s/cXiR-UeJkcdkljJvE2eERw http://palm.seu.edu.cn/xgeng/files/sc-info18.pdf https://baijiahao.baidu.com/s?id1687693358774525583&wfrspider&forpc https://blog.csdn.net/weixin_42001089/article/details/…

android item三种,Android RecyclerView中的ItemDecoration的几种绘制方法

如题&#xff0c;我们使用recyclerview的时候&#xff0c;如果没有设置显示条目的margin&#xff0c;或者padding的话&#xff0c;是没有分割线效果的。那么除去使用margin或padding,其余的方法是用itemdecoration绘制分割线我们绘制分割线的时候通常会使用drawable去绘制&…

上传文件和提交textfield_0基础掌握Django框架(37)文件上传

为了更好的学习效果&#xff0c;请搭配视频教程一起学习&#xff1a;Django零基础到项目实战 - 网易云课堂​study.163.com文件上传&#xff1a;文件上传是网站开发中非常常见的功能。这里详细讲述如何在Django中实现文件的上传功能。前端HTML代码实现&#xff1a;在前端中&…

2021年第3周LDL方向的周报

LDL小组&#xff1a; 如何快速进入研究状态 &#xff08;1&#xff09;系列性的工作&#xff0c;papermaker&#xff1a;读文献&#xff0c;顶刊顶会&#xff0c;综述性文章–》进行扩展&#xff0c;研究主线 &#xff08;2&#xff09;接手师兄师姐的工作–》并且对已有的工作…

2021年第3周人工智能方向的周报

快速进入研究&#xff1a; &#xff08;1&#xff09;读文献–》综述性的文献–》你自己去综述性文献 &#xff08;2&#xff09;已有的工作 &#xff08;3&#xff09;有没有相关的数据&#xff1f; 下一步事情&#xff1a; &#xff08;1&#xff09;想一想自己的横向做什么…

华为p10刷原生android,华为p10怎么刷机 华为p10刷机方法【详细介绍】

喜欢折腾手机的用户一定对于手机root权限获取不陌生&#xff0c;root后虽然不能享受官方联保服务但同时带来的好处不用小编多说。前面给大家介绍了 华为p10 刷入第三方recovery教程&#xff0c;现在华为p10刷机包已经放出来&#xff0c;小编给大家带来华为p10刷机权限获取教程。…

pythoncookie自动模拟登录_用Python模拟技巧带你实现自动抽屉登录自动点赞

原标题&#xff1a;用Python模拟技巧带你实现自动抽屉登录&自动点赞/1 前言/嘿&#xff0c;各位小伙伴们晚上好呀&#xff0c;今天小编又给大家带来干货内容啦,今天带来的是,如何自动登录抽屉&#xff0c;并且点赞&#xff01;原计划是不打算使用selenium的&#xff0c;但是…

同学之间互相出的一些有趣题目

题目1&#xff1a;过隧道时间最短问题 四个人&#xff08;A、B、C、D&#xff09;晚上过隧道,并且只有一个手电筒,每次只能过两个人,并且还需要有一个人回来传递手电筒,四个人过隧道的速度不一样,分别是1、2、5、10分钟,问怎么过隧道最快?总共用多长时间? 问题扩展&#xf…

android studio sqlitedatabase,在SQLite数据库Android Studio上使用预填充数据库

本问题已经有最佳答案&#xff0c;请猛点这里访问。在这里&#xff0c;我想使用我预先填充的SQLite数据库到我的Android应用程序。 因此&#xff0c;首次运行时&#xff0c;它会自动从assets文件夹中复制数据库&#xff0c;并在我的Android应用程序中将其用作数据库。到目前为止…