Android_OnTouchListener触屏事件接口-亲测可用

合集下载

AndroidListView监听滑动事件的方法(详解)

AndroidListView监听滑动事件的方法(详解)

AndroidListView监听滑动事件的⽅法(详解)ListView的主要有两种滑动事件监听⽅法,OnTouchListener和OnScrollListener1、OnTouchListenerOnTouchListener⽅法来⾃View中的监听事件,可以在监听三个Action事件发⽣时通过MotionEvent的getX()⽅法或getY()⽅法获取到当前触摸的坐标值,来对⽤户的滑动⽅向进⾏判断,并可在不同的Action状态中做出相应的处理mListView.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:// 触摸按下时的操作break;case MotionEvent.ACTION_MOVE:// 触摸移动时的操作break;case MotionEvent.ACTION_UP:// 触摸抬起时的操作break;}return false;}});不仅仅只有上⾯的三种Action状态,MotionEvent类中还定义了很多其它状态,我们可以灵活的使⽤这些状态• MotionEvent.ACTION_DOWN:开始触摸• MotionEvent.ACTION_MOVE:触摸移动• MotionEvent.ACTION_UP:触摸抬起• MotionEvent.ACTION_OUTSIDE:触摸范围超过了UI边界• MotionEvent.ACTION_CANCEL:触摸被取消时• MotionEvent.ACTION_POINTER_DOWN:当有另外⼀个触摸按下时(多点触摸)• MotionEvent.ACTION_POINTER_UP:当另⼀个触摸抬起时(多点触摸)2、OnScrollListenerOnScrollListener来⾃AbsListView中的监听事件,因为ListView直接继承⾃AbsListView,所以在AbsListView中有很多ListView相关信息OnScrollListener中有两个回调⽅法• public void onScrollStateChanged(AbsListView view, int scrollState):监听滑动状态的改变• public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount):监听滑动在源码中有其详细的解释/*** Interface definition for a callback to be invoked when the list or grid* has been scrolled.*/public interface OnScrollListener {/*** The view is not scrolling. Note navigating the list using the trackball counts as* being in the idle state since these transitions are not animated.*/public static int SCROLL_STATE_IDLE = 0;/*** The user is scrolling using touch, and their finger is still on the screen*/public static int SCROLL_STATE_TOUCH_SCROLL = 1;/*** The user had previously been scrolling using touch and had performed a fling. The* animation is now coasting to a stop*/public static int SCROLL_STATE_FLING = 2;/*** Callback method to be invoked while the list view or grid view is being scrolled. If the* view is being scrolled, this method will be called before the next frame of the scroll is* rendered. In particular, it will be called before any calls to* {@link Adapter#getView(int, View, ViewGroup)}.** @param view The view whose scroll state is being reported** @param scrollState The current scroll state. One of* {@link #SCROLL_STATE_TOUCH_SCROLL} or {@link #SCROLL_STATE_IDLE}.*/public void onScrollStateChanged(AbsListView view, int scrollState);/*** Callback method to be invoked when the list or grid has been scrolled. This will be* called after the scroll has completed* @param view The view whose scroll state is being reported* @param firstVisibleItem the index of the first visible cell (ignore if* visibleItemCount == 0)* @param visibleItemCount the number of visible cells* @param totalItemCount the number of items in the list adaptor*/public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,int totalItemCount);}2.1 OnScrollSateChanged⽅法OnScrollSateChanged根据scrollState来决定其回调的次数,它有三种模式:• OnScrollListener.SCROLL_STATE_IDLE:滚动停⽌时的状态• OnScrollListener.SCROLL_STATE_STOUCH_SCROLL:触摸正在滚动,⼿指还没离开界⾯时的状态• OnScrollListener.SCROLL_STATE_FLING:⽤户在⽤⼒滑动后,ListView由于惯性将继续滑动时的状态当⽤户没有⽤⼒滑动时,OnScrollSateChanged⽅法只会回调2次,否则回调三次,我们在使⽤时通常会以设置Flag标志,来区分不同的滑动状态,从⽽进⾏相应的处理2.2 OnScroll⽅法在ListView滚动时会⼀直被回调,它通过⾥⾯有三个参数来显⽰当前ListView的滚动状态• firstVisibleItem:当前能看见的第⼀个item的ID(从0开始)• visibleItemCount:当前可见的item总数• totalItemCount:列表中适配器总数量,也就是整个ListView中item总数注意:当前可见的item总数,包括屏幕中没有显⽰完整的item,如显⽰⼀半的item也会算在可见范围内通过这三个参数,我么可以实现很多事件判断,如:(1)判断当前是否滑动到最后⼀⾏当前视图中第⼀个item的ID加上当前屏幕中可见item的总数如果等于ListView中所有item总数时,就表⽰移动到了最后⼀⾏if (firstVisibleItem + visibleItemCount == totalItemCount && totalItemCount > 0) {// 滚动到最后⼀⾏了}(2)判断滑动的⽅向通过oldVisibleItem 记录上⼀次firstVisibleItem的位置,再与滑动后的firstVisibleItem进⾏⽐较,就可得知滑动的⽅向if (firstVisibleItem > oldVisibleItem) {// 向上滑动}if (firstVisibleItem < oldVisibleItem) {// 向下滑动}oldVisibleItem = firstVisibleItem;ListView也为我们提供了⼀些封装好了的⽅法,来获取item的位置信息// 获取当前可见区域内第⼀个item的idmListView.getFirstVisiblePosition();// 获取当前可见区域内最后⼀个item的idmListView.getLastVisiblePosition();以上这篇Android ListView监听滑动事件的⽅法(详解)就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

ontouchevent用法

ontouchevent用法

ontouchevent用法
ontouchevent是Android中一个重要的触摸事件的处理函数,它在View和ViewGroup中都可以使用。

当用户在屏幕上触摸时,ontouchevent函数将被调用,以便开发人员可以对其进行响应。

ontouchevent函数所接受的参数包括MotionEvent对象,它是一个表示触摸事件的类,包括触摸点的坐标、时间戳、触摸类型等信息。

ontouchevent函数应该返回一个布尔值,表示是否消耗了该事件。

如果返回true,则表示已经处理了该事件,不会再传递给其他View或ViewGroup;如果返回false,则表示该事件仍然可以传递给其他View或ViewGroup进行处理。

在使用ontouchevent函数时,开发人员可以根据需要实现不同的处理逻辑。

例如,可以根据触摸点的坐标计算出相应的滑动距离,实现触摸滑动效果;也可以根据触摸点的类型实现不同的响应,如长按、双击等操作。

除了ontouchevent函数以外,Android还提供了一些其他的触摸事件处理函数,如onTouchEvent、dispatchTouchEvent等,开发人员可以根据需要选择使用。

在实际开发中,需要注意多个View或ViewGroup之间的事件处理顺序,以及事件的传递和消耗,以避免出现意外的效果。

- 1 -。

Android中各种onTouch事件

Android中各种onTouch事件

点击一下非常快的(不滑动)Touchup:
onDown->onSingleTapUp->o源自SingleTapConfirmed
点击一下稍微慢点的(不滑动)Touchup:
onDown->onShowPress->onSingleTapUp->onSingleTapConfirmed
Android里有两个类
android.view.GestureDetector
android.view.GestureDetector.SimpleOnGestureListener
1) 新建一个类继承SimpleOnGestureListener,HahaGestureDetectorListener ,可以实现以下event事件。
boolean onDown(MotionEvent e)
解释:Touch down时触发
boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
解释:Touch了滑动一点距离后,up时触发。
@Override
public boolean onTouchEvent(MotionEvent event) {
gestureDetector.onTouchEvent(event);
}
所以Touchdown后一直不滑动,onDown->onShowPress->onLongPress这个顺序触发。

boolean onSingleTapConfirmed(MotionEvent e)
boolean onSingleTapUp(MotionEvent e)

android gesturedetector原理 -回复

android gesturedetector原理 -回复

android gesturedetector原理-回复"Android GestureDetector原理"是指Android中用于检测手势的类。

该类提供了一组方法,用于检测和处理用户在屏幕上的手势操作。

在本文中,我们将一步一步地回答关于Android GestureDetector原理的问题。

第一步:介绍GestureDetector类GestureDetector类是Android提供的一个用于手势检测的工具类。

它可以识别屏幕上的各种手势操作,如滑动、缩放、旋转等。

GestureDetector 类通过触摸事件(MotionEvent)来追踪用户的手势行为。

第二步:GestureDetector类的构造函数及参数GestureDetector类的构造函数需要两个参数- Context和一个GestureDetector.OnGestureListener接口的实例。

Context参数用于获取系统服务和资源,而OnGestureListener接口则用于处理各种手势事件的回调。

第三步:GestureDetector.OnGestureListener接口的回调方法GestureDetector.OnGestureListener接口定义了一组回调方法,用于处理各种手势事件。

这些方法包括:1. onDown(MotionEvent event):用户按下屏幕时调用。

通常在这个方法中初始化手势操作。

2. onShowPress(MotionEvent event):用户按下屏幕后,但还未移动或松开时调用。

可以在这个方法中做一些临时状态的显示。

3. onSingleTapUp(MotionEvent event):用户点击屏幕时调用。

4. onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):用户在屏幕上滑动时调用。

手把手教你Android全局触摸事件监听

手把手教你Android全局触摸事件监听

⼿把⼿教你Android全局触摸事件监听Android系统全局触摸事件监听Android触摸全局监听指的是调⽤监听后在任何界⾯都能获取到触摸事件。

要实现这个功能必须要修改源码添加新的接⼝,因为系统默认是不暴露这个⽅法的。

源码监听系统全局触摸事件的类和相关代码:frameworks\base\services\core\java\com\android\server\wm\WindowManagerService.java@Overridepublic void registerPointerEventListener(PointerEventListener listener, int displayId) {Slog.i(TAG, "registerPointerEventListener PointerEventListener = " + listener);synchronized (mGlobalLock) {final DisplayContent displayContent = mRoot.getDisplayContent(displayId);if (displayContent != null) {displayContent.registerPointerEventListener(listener);}}}@Overridepublic void unregisterPointerEventListener(PointerEventListener listener, int displayId) {synchronized (mGlobalLock) {final DisplayContent displayContent = mRoot.getDisplayContent(displayId);if (displayContent != null) {displayContent.unregisterPointerEventListener(listener);}}}第⼀个参数:是中PointerEventListener接⼝,⾥⾯有MotionEvent对象含有点击事件,⽐如DOWN、UP、MOVING等其他信息。

Android应用开发实验指导书

Android应用开发实验指导书

《手机应用开发》实验指导书西南科技大学计算机科学与技术学院2015.11目录《手机应用开发》 ..............................................实验指导书.....................................................实验一:搭建Android开发平台和创建HelloWorld程序 .............实验目的...................................................实验要求...................................................实验内容...................................................一、安装并配置Java JDK.................................二、下载安装集成ADT(Android Development Tools 插件的Eclipse(即adt-bundle) ........................... 错误!未定义书签。

三、创建Android虚拟设备(AVD) ........................四、创建第一个Android工程项目—HelloWorld .............实验二:UI设计................................................实验目的...................................................实验要求...................................................实验内容...................................................一、常用控件 ...........................................二、界面布局 ...........................................三、事件处理 ...........................................实验三:Intent、Activity应用..................................一、实验目的...............................................二、实验要求...............................................三、实验步骤...............................................1、创建项目 ............................................2、添加布局文件 ........................................4.修改AndroidManifest.xml文件 ........................实验四:service应用...........................................一、实验目的...............................................二、实验要求...............................................三、实验步骤...............................................1、创建项目 ............................................2、布局文件 ............................................3、修改AndroidManifest.xml文件 (24)实验五:SQLite和SQLiteDatabase应用...........................一、实验目的...............................................二、实验要求 (18)1、创建项目 ............................................2、布局文件 ............................................3、创建Activity........................................实验六:图形绘制与OpenGL ES..................................一、实验目的...............................................二、实验要求...............................................1、了解在屏幕绘图方法 ..................................2、了解OpenGL..........................................三、实验原理...............................................四、实验过程 (23)1、绘制直线、园、曲线等各种图形 ........................2、显示字符 ............................................3、利用OpenGL ES方法编程 ..............................实验七:网络访问与服务........................................一、实验目的...............................................二、实验要求...............................................1、了解手机WEB网站访问编程 ............................2、通过网络进行数据访问 ................................3、了解数据库使用 ......................................三、实验原理...............................................四、实验过程...............................................实验八硬件访问与传感器........................................一、实验目的...............................................二、实验要求...............................................1、获取手机上电话、短信等各种功能的编程 ................2、了解手机上各种传感器的功能与使用方法 ................三、实验原理...............................................四、实验过程...............................................1、了解程序使用手机电话功能的方法 ......................2、手机上有多种传感器,可以对这些传感器进行编程。

android ongesturelistener使用

android ongesturelistener使用

android ongesturelistener使用android的OnGestureListener是一种Android事件监听器,可用于跟踪用户手势操作,如拇指滑动、双指拖动、屏幕单指轻击等。

使用OnGestureListener需要实现如下几个方法:* onDown(): 在手指接触屏幕时调用,返回true表示开始手势操作,return false则取消手势操作。

* onShowPress(): 在手指按下但没有移动或抬起的时候调用。

* onLongPress(): 在长按屏幕时调用。

* onScroll(): 在手指滑动的时候调用,第一个参数是滑动的起点,也就是手指按下的那个点,第二个参数是滑动的终点,也就是手指抬起的那个点,第三个参数是滑动的距离,也就是第二个参数减去第一个参数的值。

* onFling(): 在快速滑动的时候调用,第一个参数是滑动的起点,也就是手指按下的那个点,第二个参数是滑动的终点,也就是手指抬起的那个点,第三个参数是滑动的速度,也就是第四个参数减去第三个参数的值。

下面示例,我们使用OnGestureListener来处理拖动操作:1.实现GestureDetector.OnGestureListener接口并实现其中的几个方法:```class MyOnGestureListener implementsGestureDetector.OnGestureListener {@Overridepublic boolean onDown(MotionEvent e) {return false;}@Overridepublic void onShowPress(MotionEvent e) {}@Overridepublic boolean onSingleTapUp(MotionEvent e) {return false;}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {//在这里处理拖动操作return false;}@Overridepublic void onLongPress(MotionEvent e) {}@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2,float velocityX, float velocityY) {return false;}}```2.创建GestureDetector实例并传入实现的MyOnGestureListener:```GestureDetector gestureDetector = new GestureDetector(this, new MyOnGestureListener());```3.在View 对象的onTouchEvent()方法中,调用GestureDetector的onTouchEvent()方法:```public boolean onTouchEvent(MotionEvent event) { gestureDetector.onTouchEvent(event);return super.onTouchEvent(event);}```以上就是如何使用OnGestureListener的基本步骤。

AndroidonTouchEvent事件中onTouch方法返回值(介绍)

AndroidonTouchEvent事件中onTouch方法返回值(介绍)

AndroidonTouchEvent事件中onTouch⽅法返回值(介绍)1、若return false说明没有成功执⾏onTouch事件,在执⾏完onTouch⾥⾯的代码之后,onTouch事件并没有结束。

因此某些组件如Gallery会⾃动执⾏它所在view⾥onTouch⽅法的代码。

若在onTouch⽅法⾥⾯增加你的代码并且最后return false就会执⾏你在OnTouch⽅法中的处理操作了。

2、若return true说明你已经成功执⾏onTouch⽅法了,在执⾏完onTouch中的代码之后,这个onTouch事件就结束了。

也不会再调⽤组件如Gallery默认的onTouch⽅法了。

在onTouch⽅法中,我们可以做很多操作,如move,down,up等等,若我们在move⾥⾯return false,那么接着的fling,up等后⾯的事件也不会处理。

Gallery.setOnTouchListener(new OnTouchListener(){//@Overridepublic boolean onTouch(View v, MotionEvent event) {System.out.println("Gallery onTouch");if(event.getAction()==MotionEvent.ACTION_MOVE){mDismiss.removeMessages(1);System.out.println("ACTION_MOVE ");}else if(event.getAction()==MotionEvent.ACTION_UP){mDismiss.sendEmptyMessageDelayed(1,10000);System.out.println("ACTION_UP ");}return false;}});注意:1、在ViewGroup中onInterceptTouchEvent⽅法若反回false,那么触屏事件会继续向下传递,但如果没有⼦View去处理这个事件,即⼦view的onTouchEvent没有返回True,则最后还是由ViewGroup去处理这个事件,也就⼜执⾏了⾃⼰的onTouchEvent。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Android OnTouchListener触屏事件接口在修改后的工厂测试程序中,用到了关于触摸事件的获取,顺便学习关于触摸事件和触摸位置的知识,其方法如下:public boolean onTouchEvent(MotionEvent event) {//获得触摸的坐标float x = event.getX();float y = event.getY(); switch (event.getAction()){//触摸屏幕时刻case MotionEvent.ACTION_DOWN:break;//触摸并移动时刻case MotionEvent.ACTION_MOVE:break;//终止触摸时刻case MotionEvent.ACTION_UP:break;}return true;}关于public boolean onTouchEvent (MotionEvent event)方法:参数event:参数event为手机屏幕触摸事件封装类的对象,其中封装了该事件的所有信息,例如触摸的位置、触摸的类型以及触摸的时间等。

该对象会在用户触摸手机屏幕时被创建。

返回值:该方法的返回值机理与键盘响应事件的相同,同样是当已经完整地处理了该事件且不希望其他回调方法再次处理时返回true,否则返回false。

该方法并不像之前介绍过的方法只处理一种事件,一般情况下以下三种情况的事件全部由onTouchEvent方法处理,只是三种情况中的动作值不同。

屏幕被按下:当屏幕被按下时,会自动调用该方法来处理事件,此时MotionEvent.getAction()的值为MotionEvent.ACTION_DOWN,如果在应用程序中需要处理屏幕被按下的事件,只需重新该回调方法,然后在方法中进行动作的判断即可。

屏幕被抬起:当触控笔离开屏幕时触发的事件,该事件同样需要onTouchEvent方法来捕捉,然后在方法中进行动作判断。

当MotionEvent.getAction()的值为MotionEvent.ACTION_UP 时,表示是屏幕被抬起的事件。

在屏幕中拖动:该方法还负责处理触控笔在屏幕上滑动的事件,同样是调用MotionEvent.getAction()方法来判断动作值是否为MotionEvent.ACTION_MOVE再进行处理。

OnTouchListener接口是用来处理手机屏幕事件的监听接口,当为View的范围内触摸按下、抬起或滑动等动作时都会触发该事件。

该接口中的监听方法签名如下。

Java代码:public boolean onTouch(View v, MotionEvent event)参数v:参数v同样为事件源对象。

参数event:参数event为事件封装类的对象,其中封装了触发事件的详细信息,同样包括事件的类型、触发时间等信息。

节中介绍了一个在屏幕中拖动矩形移动的案例,本节将继续采用该案例的思路,通过监听接口的方式实现在屏幕上拖动按钮移动的案例。

开发步骤如下。

创建一个名为Sample的Android项目。

准备字符串资源,打开strings.xml文件,用下列代码替换原有代码。

Java代码:<?xml version="1.0" encoding="utf-8"?><!-- XML的版本及编码方式--><resources><string name="hello">Hello World, Sample</string><!--定义hello字符串--><string name="app_name">Sample</string><!--定义app_name字符串--><string name="location">位置</string><!--定义location字符串--></resources>说明:与前面介绍的案例相同,对程序中用到的字符串资源进行定义。

开发布局文件。

打开res/layout目录下的main.xml,用下列代码替换其原有代码。

Java代码:<?xml version="1.0" encoding="utf-8"?><!-- XML的版本及编码方式--><AbsoluteLayoutandroid:id="@+id/AbsoluteLayout01"android:layout_width="fill_parent"android:layout_height="fill_parent"xmlns:android="/apk/res/android"><!-- XML的版本及编码方式--><Buttonandroid:layout_y="123dip"android:layout_x="106dip"android:text="@string/location"android:layout_height="wrap_content"android:id="@+id/Button01"android:layout_width="wrap_content"/><!-- XML的版本及编码方式--></AbsoluteLayout>说明:该布局文件非常简单,只是在一个绝对布局中添加一个按钮控件即可,需要注意的是应该为该按钮指定ID,以便在Java代码中可以得到该按钮的引用。

接下来开始开发主要的逻辑代码。

编写Sample.java文件,其代码如下所示。

Java代码:package wyf.ytl;//声明所在包import android.app.Activity;//引入相关类//该处省略了部分类的引入代码,读者可以自行查阅随书光盘中的源代码\import android.widget.Button;//引入相关类public class Sample extends Activity {final static int WRAP_CONTENT=-2;//表示WRAP_CONTENT的常量final static int X_MODIFY=4;//在非全屏模式下X坐标的修正值final static int Y_MODIFY=52;//在非全屏模式下Y坐标的修正值int xSpan;//在触控笔点击按钮的情况下相对于按钮自己坐标系的int ySpan;//X,Y位置public void onCreate(Bundle savedInstanceState) {//重写的onCreate方法super.onCreate(savedInstanceState);setContentView(yout.main);//设置当前的用户界面Button bok=(Button)this.findViewById(R.id.Button01);//得到按钮的引用bok.setOnTouchListener(//添加监听new OnTouchListener(){//创建监听类public boolean onTouch(View view, MotionEventevent) {//重写的监听方法switch(event.getAction()){//监听事件case MotionEvent.ACTION_DOWN://触控笔按下xSpan=(int)event.getX();//得到X坐标ySpan=(int)event.getY();//得到Y坐标break;case MotionEvent.ACTION_MOVE://触控笔移动Button bok=(Button)findViewById(R.id.Button01);//让按钮随着触控笔的移动一起移动youtParams lp= new youtParams( WRAP_CONTENT, WRAP_CONTENT,(int)event.getRawX()-xSpan-X_MODIFY,(int)event.getRawY()-ySpan-Y_MODIFY ) ;bok.setLayoutParams(lp);//设置按钮的坐标break;}return true;}});}public boolean onKeyDown (int keyCode, KeyEvent event){//键盘键按下的方法Button bok=(Button)this.findViewById(R.id.Button01);//得到按钮的引用bok.setText(keyCode+" Down");//设置按钮的文字return true;}public boolean onKeyUp (int keyCode,KeyEvent event){//键盘键抬起的方法Button bok=(Button)this.findViewById(R.id.Button01);//得到按钮的引用bok.setText(keyCode+" Up");//设置按钮的文字return true;}public boolean onTouchEvent (MotionEventevent){//让按钮随触控笔的移动一起移动Button bok=(Button)this.findViewById(R.id.Button01);//得到按钮引用youtParams lp=new youtParams(//创建LayoutParams WRAP_CONTENT, WRAP_CONTENT, (int)event.getRawX()-xSpan-X_MODIFY,//X坐标(int)event.getRawY()-ySpan-Y_MODIFY//Y坐标) ;bok.setLayoutParams(lp);return true;}}第6~10行声明了程序中需要的一些变量。

第11~40行重写了Activity中的onCreate方法,在方法中设置当前的用户界面,然后得到按钮的引用并为其注册监听。

第16~38行创建监听器类并重写onTouch方法,然后根据事件的类型执行不同的操作。

相关文档
最新文档