Android 事件触发机制的深入学习

 Android 事件触发机制的深入学习

最近在研究android的事件触发和传播机制,说来很惭愧,web下的事件太熟悉不过了,可在android中却很郁闷,常用的触摸事件都糊里糊涂的,在网上看了半天,也整理一份,供大家参考:

public class CustomDefaultActivity implements OnTouchListener {
  private GestureDetector gd1;
  private TableLayout tableLayout; 

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.custom_default);
    tableLayout = (TableLayout) findViewById(R.id.tableLayout);
    gd1 = new GestureDetector(CustomDefaultActivity.this, new MyGesture());
    tableLayout.setOnTouchListener(this);
    tableLayout.setLongClickable(true);
  } 

  @Override
  public boolean dispatchTouchEvent(MotionEvent event) {
    Log.e("-----------------------------------------------------------------------",
      "dispatchTouchEvent"); 

    if (gd1.onTouchEvent(event)) {
      event.setAction(MotionEvent.ACTION_CANCEL);
    } 

    return super.dispatchTouchEvent(event);
  } 

  @Override
  public boolean onTouch(View arg0, MotionEvent arg1) {
    Log.e("-------", "onTouch"); 

    return gd1.onTouchEvent(arg1);
  } 

  public class MyGesture implements OnGestureListener {
    @Override
    public boolean onDown(MotionEvent arg0) {
      Log.e("-------",
        "onDown, 按下时触发[" + arg0.getX() + "," + arg0.getY() + "]"); 

      return true;
    } 

    @Override
    public void onLongPress(MotionEvent arg0) {
      Log.e("-------", "onLongPress,长时间按住时触发");
    } 

    @Override
    public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,
      float arg3) {
      Log.e("-------",
        "onScroll,滑动拖动事件[" + arg0.getX() + "," + arg0.getY() + "]=[" +
        arg1.getX() + "," + arg1.getY() + "]"); 

      return true;
    } 

    @Override
    public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2,
      float arg3) {
      Log.e("-------", "onFling, 滑动甩出事件"); 

      return true;
    } 

    @Override
    public void onShowPress(MotionEvent arg0) {
      Log.e("-------", "onShowPress,down事件发生,而move或up还没发生前触发该事件");
    } 

    @Override
    public boolean onSingleTapUp(MotionEvent arg0) {
      Log.e("-------", "onSingleTapUp 释放事件"); 

      return true;
    }
  }
}

监控触摸事件,主要是实现OnGestureListener类,并重写其中的几个方法,以监听事件发生。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Android onNewIntent()触发机制及注意事项

    一.onNewIntent() 在IntentActivity中重写下列方法:onCreate onStart onRestart  onResume  onPause onStop onDestroy  onNewIntent 1.其他应用发Intent,执行下列方法: onCreate onStart onResume 发Intent的方法: Uri uri = Uri.parse("philn://blog.163.com"); Intent it = new Intent(In

  • Android 事件触发机制的深入学习

     Android 事件触发机制的深入学习 最近在研究android的事件触发和传播机制,说来很惭愧,web下的事件太熟悉不过了,可在android中却很郁闷,常用的触摸事件都糊里糊涂的,在网上看了半天,也整理一份,供大家参考: public class CustomDefaultActivity implements OnTouchListener { private GestureDetector gd1; private TableLayout tableLayout; @Override

  • python模拟事件触发机制详解

    本文实例为大家分享了python模拟事件触发机制的具体代码,供大家参考,具体内容如下 EventManager.py # -*- encoding: UTF-8 -*- # 系统模块 from queue import Queue, Empty from threading import * class EventManager: def __init__(self): """初始化事件管理器""" # 事件对象列表 self.__eventQu

  • Android事件分发机制示例分析

    Android事件类型 public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: break; case MotionEvent.ACTION_CANCEL: break; } return tru

  • Android事件分发机制的详解

    Android事件分发机制 我们只考虑最重要的四个触摸事件,即:DOWN,MOVE,UP和CANCEL.一个手势(gesture)是一个事件列,以一个DOWN事件开始(当用户触摸屏幕时产生),后跟0个或多个MOVE事件(当用户四处移动手指时产生),最后跟一个单独的UP或CANCEL事件(当用户手指离开屏幕或者系统告诉你手势(gesture)由于其他原因结束时产生).当我们说到"手势剩余部分"时指的是手势后续的MOVE事件和最后的UP或CANCEL事件. 在这里我也不考虑多点触摸手势(我

  • Android事件传递机制

    实验环境 OS X 10.9 Eclipse(ADT) Android源码版本:API Level 19(Android 4.4) Android事件构成 在Android中,事件主要包括点按.长按.拖拽.滑动等,点按又包括单击和双击,另外还包括单指操作和多指操作.所有这些都构成了Android中的事件响应.总的来说,所有的事件都由如下三个部分作为基础: 按下(ACTION_DOWN) 移动(ACTION_MOVE) 抬起(ACTION_UP) 所有的操作事件首先必须执行的是按下操作(ACTIO

  • Android事件分发机制全面解析

    事件分发机制 事件分发机制的两个阶段: 分发:事件从父视图往子视图分发,被拦截后不再传递,进入回溯阶段 回溯:事件从子视图往父视图回溯,被消费后不再回溯 关键方法: ViewGroup.dispatchTouchEvent 往子视图分发事件 ViewGroup.onInterceptTouchEvent 返回 true 表示拦截分发事件,不再传递,进入当前视图 onTouchEvent View.dispatchTouchEvent 默认事件分发,调用 onTouchEvent View.onT

  • Android事件分发机制 ViewGroup分析

    目录 整体流程 源码分析 前言: 事件分发从手指触摸屏幕开始,即产生了触摸信息,被底层系统捕获后会传递给Android的输入系统服务IMS,通过Binder把消息发送到activity,activity会通过phoneWindow.DecorView最终发送给ViewGroup.这里就直接分析ViewGroup的事件分发 整体流程 配合图在看一段伪代码: public boolean dispatchTouchEvent(MotionEvent ev) :Boolean{ val result

  • Android事件分发机制(上) ViewGroup的事件分发

    综述 Android中的事件分发机制也就是View与ViewGroup的对事件的分发与处理.在ViewGroup的内部包含了许多View,而ViewGroup继承自View,所以ViewGroup本身也是一个View.对于事件可以通过ViewGroup下发到它的子View并交由子View进行处理,而ViewGroup本身也能够对事件做出处理.下面就来详细分析一下ViewGroup对时间的分发处理. MotionEvent 当手指接触到屏幕以后,所产生的一系列的事件中,都是由以下三种事件类型组成.

  • android事件分发机制的实现原理

    android中的事件处理,以及解决滑动冲突问题都离不开事件分发机制,android中的事件流,即MotionEvent都会经历一个从分发,拦截到处理的一个过程.即dispatchTouchEvent(),onInterceptEvent()到onTouchEvent()的一个过程,在dispatchTouchEvent()负责了事件的分发过程,在dispatchTouchEvent()中会调用onInterceptEvent()与onTouchEvent(),如果onInterceptEven

随机推荐