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<MotionEvent> 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();}
时间: 2024-12-28 10:20:49

android 代码实现模拟用户点击、滑动等操作的相关文章

Android Splash界面支持用户点击 直接进入主界面

现在随便下载一个app,打开都有一个Splash界面,为什么一进去就有一个splash界面呢?其实用户打开你的产品,希望用最少的信息给用户最多的信息量,让用户知道这是一款什么产品,这是说产品方面的,还有一个是功能方面的,比如数据库的拷贝,版本更新,还有一个重要的就是展示该公司的logo等等,现在的移动互联网相当于pC端对产品的体验更讲究,我们现在发现一个很好的产品它未必能马上能给这公司盈利,但是用户量大时,表示用户对你的产品认可,那么公司融资就比较简单了,废话不多说 如果splash什么都不做,

模拟用户点击链接

1 package tool; 2 import org.junit.Assert; 3 import org.openqa.selenium.WebDriver; 4 import org.openqa.selenium.chrome.ChromeDriver; 5 import org.openqa.selenium.firefox.FirefoxDriver; 6 import org.openqa.selenium.ie.InternetExplorerDriver; 7 import

使用appium模拟用户发送短信

一段简单粗糙的代码.主要是实现的功能是模拟用户发送短信的功能. python版本3.5.2 appium版本1.4.16.1 from appium import webdriver desired_caps = { 'platformName':'Android', 'platformVersion':'4.4.2', 'deviceName':'test', 'appPackage':'com.android.mms', 'appActivity':'com.android.mms.ui.C

Android代码模拟物理、屏幕点击事件

一.应用中模拟物理和屏幕点击事件 例如,模拟对某个view的点击事件 private void simulateClick(View view, float x, float y) { long downTime = SystemClock.uptimeMillis(); final MotionEvent downEvent = MotionEvent.obtain(downTime, downTime,MotionEvent.ACTION_DOWN, x, y, 0); downTime +

Android手机上,利用bat脚本模拟用户操作

---- 那么你就可以来看看这篇帖子了. 言归正传 利用bat脚本模拟用户操作,需要用到两点: ①就是adb命令了,adb命令可以用来模拟用户在手机上的操作 ②bat语言,就是批处理语言,主要用来进行逻辑处理,跟众多语言语法一样,批处理语言也包括for循环.if语句之类的语法: 一.adb命令 首先我们来介绍模拟用户在手机上操作的adb命令 input keyevent //发送键盘事件 用法说明: adb shell input keyevent "value" usage: inp

【Android测试】【随笔】模拟双指点击

手势 看到这个标题,很多人会想一想 “双指点击” 的操作是什么样的,首先解释一下吧,为了能清晰明了一点,请看下面的图: 左上角的Tap代表点击操作,也就是我们说的 “单指单击”:右上角是Double Tap顾名思义,使用一个手指完成 “双击” 的动作:左下角的Scroll代表的是用一个手指完成 “滑动”的动作:最后看右下角这张图,这个动作就是我们本节要讲的内容,用两个手指完成 “单击” 的动作,注意两个手指点击的实际要同时,同时按下,同时抬起. 什么需求 为什么会有这样的需求呢?这个需求可能大部

Android 实现用户列表信息滑动删除功能和选择删除功能

在项目开发过程中,常常需要对用户列表的信息进行删除的操作.Android中常用的删除操作方式有两种 ,一种就是类似微信的滑动出现删除按钮方式,还有一种是通过CheckBox进行选择,然后通过按钮进行删除的方式.本来的实例集成上述的两种操作方式来实现用户列表删除的效果. 设计思路:在适配器类MyAdapter一个滑动删除按钮显示或隐藏的Map,一个用于CheckBox是否选中的Map和一个与MainAcitivyt进行数据交互的接口ContentsDeleteListener,同时该接口包含两个方

UWP 在 WebView 中执行 JavaScript 代码(用于模拟用户输入等) - walterlv

原文:UWP 在 WebView 中执行 JavaScript 代码(用于模拟用户输入等) - walterlv UWP 在 WebView 中执行 JavaScript 代码(用于模拟用户输入等) 2018-12-30 14:08 UWP 中使用 WebView 时可以在网页中额外执行一些代码.于是你几乎可以在网页上做任何事情,那些你可以在浏览器控制台中做的事情. 本文将介绍做法. 本文内容 准备环境 执行 JavaScript 代码 模拟用户输入 JavaScript eval(string

Android代码学习--点击事件的几种写法

由来:常规的写法参见<写一个apk>,每次点击按钮,按钮先查找文本框等元素,然后再操作,其实查找操作是很费时的操作,因此将该定义放到Activity的onCreate中:Oncreate只会执行一次,这样Activity一旦执行,就先创建好控件们了. 第二种方法:通过匿名内部类的方法:就是button.setOnClickListener(new OnClickListener(){ //实现OnClickListener接口 @Override public void onClick(Vie