关于motionevent的使用
最近在研究robotium的方法,在Scroller.java中有一个drag方法,如下:
/*** Simulate touching a specific location and dragging to a new location.** This method was copied from {@code TouchUtils.java} in the Android Open Source Project, and modified here.** @param fromX X coordinate of the initial touch, in screen coordinates* @param toX Xcoordinate of the drag destination, in screen coordinates* @param fromY X coordinate of the initial touch, in screen coordinates* @param toY Y coordinate of the drag destination, in screen coordinates* @param stepCount How many move steps to include in the drag*/public void drag(float fromX, float toX, float fromY, float toY,int stepCount) {long downTime = SystemClock.uptimeMillis();long eventTime = SystemClock.uptimeMillis();float y = fromY;float x = fromX;float yStep = (toY - fromY) / stepCount;float xStep = (toX - fromX) / stepCount;MotionEvent event = MotionEvent.obtain(downTime, eventTime,MotionEvent.ACTION_DOWN, fromX, fromY, 0);try {inst.sendPointerSync(event);} catch (SecurityException ignored) {}for (int i = 0; i < stepCount; ++i) {y += yStep;x += xStep;eventTime = SystemClock.uptimeMillis();event = MotionEvent.obtain(downTime, eventTime,MotionEvent.ACTION_MOVE, x, y, 0);try {inst.sendPointerSync(event);} catch (SecurityException ignored) {}}eventTime = SystemClock.uptimeMillis();event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP,toX, toY, 0);try {inst.sendPointerSync(event);} catch (SecurityException ignored) {}}
里面有个MotionEvent的类,下面摘自网上的一篇博客,写的很好;
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<test.lzqdiy.MyLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:gravity="center"android:orientation="vertical" ><test.lzqdiy.MyTextViewandroid:id="@+id/tv"android:layout_width="200px"android:layout_height="200px"android:background="#FFFFFF"android:text="lzqdiy"android:textColor="#0000FF"android:textSize="40sp"android:textStyle="bold" /></test.lzqdiy.MyLinearLayout>
三个java文件:
package test.lzqdiy;import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;public class MainActivity extends Activity
{@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@Overridepublic boolean onCreateOptionsMenu(Menu menu){// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
package test.lzqdiy;import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.LinearLayout;public class MyLinearLayout extends LinearLayout {private final String TAG = "MyLinearLayout";public MyLinearLayout(Context context, AttributeSet attrs) {super(context, attrs);Log.d(TAG, TAG);}@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {int action = ev.getAction();switch (action) {case MotionEvent.ACTION_DOWN:Log.d(TAG, "dispatchTouchEvent action:ACTION_DOWN");break;case MotionEvent.ACTION_MOVE:Log.d(TAG, "dispatchTouchEvent action:ACTION_MOVE");break;case MotionEvent.ACTION_UP:Log.d(TAG, "dispatchTouchEvent action:ACTION_UP");break;case MotionEvent.ACTION_CANCEL:Log.d(TAG, "dispatchTouchEvent action:ACTION_CANCEL");break;}return super.dispatchTouchEvent(ev);}@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {int action = ev.getAction();switch (action) {case MotionEvent.ACTION_DOWN:Log.d(TAG, "onInterceptTouchEvent action:ACTION_DOWN");break;case MotionEvent.ACTION_MOVE:Log.d(TAG, "onInterceptTouchEvent action:ACTION_MOVE");break;case MotionEvent.ACTION_UP:Log.d(TAG, "onInterceptTouchEvent action:ACTION_UP");break;case MotionEvent.ACTION_CANCEL:Log.d(TAG, "onInterceptTouchEvent action:ACTION_CANCEL");break;}return false;}@Overridepublic boolean onTouchEvent(MotionEvent ev) {int action = ev.getAction();switch (action) {case MotionEvent.ACTION_DOWN:Log.d(TAG, "---onTouchEvent action:ACTION_DOWN");break;case MotionEvent.ACTION_MOVE:Log.d(TAG, "---onTouchEvent action:ACTION_MOVE");break;case MotionEvent.ACTION_UP:Log.d(TAG, "---onTouchEvent action:ACTION_UP");break;case MotionEvent.ACTION_CANCEL:Log.d(TAG, "---onTouchEvent action:ACTION_CANCEL");break;}return true;}}
package test.lzqdiy;import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.TextView;public class MyTextView extends TextView
{private final String TAG = "MyTextView";public MyTextView(Context context, AttributeSet attrs){super(context, attrs);}@Overridepublic boolean dispatchTouchEvent(MotionEvent ev){int action = ev.getAction();switch (action){case MotionEvent.ACTION_DOWN:Log.d(TAG, "dispatchTouchEvent action:ACTION_DOWN");break;case MotionEvent.ACTION_MOVE:Log.d(TAG, "dispatchTouchEvent action:ACTION_MOVE");break;case MotionEvent.ACTION_UP:Log.d(TAG, "dispatchTouchEvent action:ACTION_UP");break;case MotionEvent.ACTION_CANCEL:Log.d(TAG, "onTouchEvent action:ACTION_CANCEL");break;}return super.dispatchTouchEvent(ev);}@Overridepublic boolean onTouchEvent(MotionEvent ev){int action = ev.getAction();switch (action){case MotionEvent.ACTION_DOWN:Log.d(TAG, "---onTouchEvent action:ACTION_DOWN");break;case MotionEvent.ACTION_MOVE:Log.d(TAG, "---onTouchEvent action:ACTION_MOVE");break;case MotionEvent.ACTION_UP:Log.d(TAG, "---onTouchEvent action:ACTION_UP");break;case MotionEvent.ACTION_CANCEL:Log.d(TAG, "---onTouchEvent action:ACTION_CANCEL");break;}return true;}}
关于motionevent的使用相关推荐
- MotionEvent的getX(),getY()与getRawX(),getRawY()区别
getX()是表示Widget相对于自身左上角的x坐标,而getRawX()是表示相对于屏幕左上角的x坐标值(注意:这个屏幕左上角是手机屏幕左上角,不管activity是否有titleBar或是否全屏 ...
- Android 多点触控 MotionEvent详解
相关API 介绍 MotionEvent.getY() 和 MotionEvent.getRawY() 的区别 getY 表示触摸事件在当前的View内的Y 坐标, getRawY表示触摸事件在整个屏 ...
- android MotionEvent
getAction() 获取事件的类型,这是一个组合值,由pointer的index值和事件类型值组合而成的 getActionMasked() 获取事件的类型,不具有其他信息 参考: http:// ...
- iOS开展——全球应对MotionEvent
遇到这样的要求:无论在哪个应用程序view controller,摇动手机,我们可以启动的方法. 你可以认为这个想法是使用包装的苹果"MotionEvent".但是,假如简单地把代 ...
- android MotionEvent中getX()和getRawX()的区别
今天,讲讲触摸时间里 getX()和getRawX()的区别. 如上图所示: getRowX:触摸点相对于屏幕的坐标 getX: 触摸点相对于按钮的坐标 getTop: 按钮左上角相对于父vie ...
- Android MotionEvent中getX()、getRawX()和getTop()的区别
为了展示getX().getRawX()和getTop()方法的区别,我们写了一个简单的测试Demo,我们写了一个自定义控件(继承ImageView). package com.demo.ui;imp ...
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
onInterceptTouchEvent()用于处理事件并改变事件的传递方向.处理事件这个不用说了,你在函数内部编写代码处理就可以了.而决定传递方向的是返回值,返回为false时事件会传递给子控件的 ...
- 触控事件MotionEvent
MotionEvent中封装的一些常用的事件常量: //单点触摸按下动作 public static final int ACTION_DOWN = 0; //单点触摸抬起动作 public stat ...
- GridView(网格视图)+MotionEvent(触控事件)实现可以拖动排序的网格图
1.一触碰,就回调onInterceptTouchEvent(MotionEvent ev)事件,每次的触碰都只回调一次,接着只要还没有放手,就一直回调onTouchEvent(MotionEvent ...
- 【Android 事件分发】MotionEvent.ACTION_DOWN 按下事件分发流程( Activity | ViewGroup | View )
Android 事件分发 系列文章目录 [Android 事件分发]事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) [Andr ...
最新文章
- 最新计算机技能需求排名出炉:Python仅排第三,第一你猜得到吗?(附链接)...
- MicroPython实例之TPYBoardv102自动浇花系统
- c# 访问hbase_C#教程之通过Thrift实现C#与Hbase交流
- linux下使用VS CODE + CMAKE 调试C++程序
- NOIP 2007 普及组初赛试题(C++)(含答案)
- oracle 查看动态性能视图,oracle常用动态性能视图
- GCD之barrier
- python项目结构图_python 项目目录结构设置
- 当了几年面试官看了无数简历,你们可以认真写简历吗?
- Linux搭建邮件服务器postfix
- 遗传算法求解TSP问题及MTATLAB代码
- Java项目:ssm电影院购票系统
- c语言贪吃蛇程序设计报告蚂蚁文库,贪吃蛇游戏C程序设计报告
- 分享几个Ubuntu必装的软件
- 塑胶模具设计-双色注塑模具设计36条经典经验分享
- php 编码转换 乱码解决
- oracle grant
- 游戏贴图打包工具——TexturePacker详解
- 表单提交成功后重置表单
- sata3.0 linux内核,编译Linux内核3.0系统出现的警告信息
热门文章
- MacOS使用conan
- html 如何完美的显示图片,不拉伸图片,完整显示等等。
- 2022 百度面试题
- 美国云主机如何保证数据安全?
- php中的ol标签,html ol标签的使用与定义详解
- html导出pdf及word,保留完成样式以及格式调研
- Introduction to Graph Neural Network(图神经网络概论)翻译:Chapter2:Basic of Math and Graph
- 计算机网络互连基础技术及实战
- 网站项目计划书的写法如何写网站设计策划书
- 【无标题】https://e-cloudstore.com/ec/api/applist/index.html#/