zoukankan      html  css  js  c++  java
  • 事件分发,事件消费,事件传递机制

    0.学习目的:
    1.解决开发中点击冲突,滑动冲突
    drawerLayout点击穿透
    viewpager嵌套viewpager左右滑动的时候冲突

    2.深入了解Android事件机制

    1.事件
      1.事件包括:点击,双击,长按,滑动,拖拽,多点触控,组成了Android的事件
      2.事件动作组成:
        1.ACTION_DOWN 按下事件, 所有的事件都是从按下开始的
        2.ACTION_MOVE 移动事件 ,按下后移动
        3.ACTION_UP 弹起事件, 手指离开
      3.事件的传递过程
    按下(屏幕) -- 系统 --- 应用 --- activity --- viewgroup1 --- viewgroup2* .... view (没有子控件,总结的view)

    1.为什么activity中没有onInterceptTouchEvent方法?
      activity使用来与用户进行交互的,如果事件不传递,无意义
    2.为什么view中没有onInterceptTouchEvent方法
      没有包含的子控件,事件不需要传递

    2.验证事件传递机制

    TouchEvent的传递

    事件拦截

    1.事件 -- A dispatch --- VP dispatch ----V dispatch ---V touchEvent
    1.----false--- V dispatch false --- VP toucheEvent false --- VP dispatch false --- A dispatch false
    2.----true --- V dispatch true ---- VP dispatch true --- A dispatch true

    view的onTouchEvent的返回值:
    textview --- 返回 false
    button ---- 返回true
    原因: 在onTouchEvent方法里面, 如果view的clickable 为false或者 longClickAble为false,则view的onTouchEvent方法直接返回false
    如何让textview可以点击,并返回true:
    1.设置是否可以点击
      1.tvTest.setClickable(true);
      2.tvTest.setLongClickable(true);

     3.xml属性中设置android:Clickable = true

    2.setOnclickListener方法,默认会执行tvTest.setClickable(true);
    setOnLongClickListener方法,,默认会执行tvTest.setLongClickable(true);

    .onTouch方法
    1.设置触摸监听
    /*触摸监听*/
    btnTest.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
      Log.i("AAA", "MainActivity--button-onTouch");
      return true;
    }
    });

    2.该方法在view的dispatchEvent方法中执行
    3.返回值true表示消耗该事件,false不消耗
    4.如果返回True, 不会执行onTouchEvent方法,返回false,会执行onTouchEvent方法
    5.点击事件是在onTouchEvent方法中判断并调用的

    6.返回为true不会执行onClick方法

  • 相关阅读:
    字符读取流缓冲区
    Runtime、System类
    字符流和字节流
    将C盘一个文本文件复制到D盘。
    DateDemo
    Collection单列集合 Map双列集合
    泛型
    Collection接口
    String类
    Python代码约定
  • 原文地址:https://www.cnblogs.com/fangg/p/5924821.html
Copyright © 2011-2022 走看看