Android进阶-控件的触摸与点击

原创 2015年11月19日 20:27:03

Android进阶-控件的触摸与点击

  • Point1

在Android中,onClick、onLongClick的触发是和ACTION_DOWN及ACTION_UP相关的,在时序上,如果我们在一个View中同时覆写了onClick、
onLongClick及onTouchEvent的话,onTouchEvent是最先捕捉到ACTION_DOWN和ACTION_UP事件的,其次才可能触发onClick或者onLongClick。

在Android的源码中是这样写的:
即事件顺序为: ACTION_DOWN -> onLongClick -> ACTION_UP -> onClick

    case MotionEvent.ACTION_DOWN:

        mPrivateFlags |= PRESSED;

        refreshDrawableState();

        if ((mViewFlags & LONG_CLICKABLE) == LONG_CLICKABLE) {

             postCheckForLongClick(); 

        }

        break;

    case MotionEvent.ACTION_UP:

        if ((mPrivateFlags & PRESSED) != 0) {

             boolean focusTaken = false;

             if (isFocusable() && isFocusableInTouchMode() && !isFocused()) {

                   focusTaken = requestFocus();

             }


        if (!mHasPerformedLongPress) {

           if (mPendingCheckForLongPress != null) {

                 removeCallbacks(mPendingCheckForLongPress);

           }

           if (!focusTaken) {

                  performClick();

           }

        }

        …

        break;
  • 即在开发时应注意

    • 一个控件响应触摸或者点击事件,如果返回true, 则这个事件,就算已经处理完了, 如果返回false,那么事件会按照顺序继续传递。
    • 因此,触摸与点击同时监听时, 如果触摸返回了true, 那么点击监听是不可能再监听到这个事件发生的。
  • Point2

    • 如果想要用户,可以看到界面,但是却不能操作界面,(类似第一次安装软件的引导使用)。
    • 我们可以搞一个透明类型的activity覆盖在上面,这样就可以达到效果。

例如:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:background="#5000"    <!--半透明-->
        > </RelativeLayout>
  • Point3
    • 当我们在service中启动Activity时,应设置FLAG_ACTIVITY_NEW_TASK
    • 这是因为Service并没有任务栈, 而Activity想要运行,是需要任务栈的,因此要为Activity弄一个任务栈
版权声明:本文为博主原创文章,未经博主允许不得转载。

Android 自定义View控件,实现跟随手指触摸移动的小球

Android UI组件是通过继承View类,然后绘制内容,比如ImageView,TextView等组件都是继承View类。 当Android系统提供的组件功能不能满足需求时,可以通过继承View类...
  • u013420428
  • u013420428
  • 2017年01月21日 16:13
  • 1529

Android 控件的触摸事件传递与处理

了解Android控件的触摸事件传递与处理对我们日常开发中自定义控件和触摸事件冲突解决有重大意义。Android控件的触摸事件传递和处理主要有以下几个方法,下面一一介绍...
  • stephenzcl
  • stephenzcl
  • 2014年12月20日 23:12
  • 2684

Android触摸事件的传递与处理

了解Android控件的触摸事件的传递与处理对我们开发中自定义控件和触摸事件的冲突解决有很大作用。我们先来看看与触摸事件相关的几个方法:   boolean dispatchTouchEvent(...
  • u011282703
  • u011282703
  • 2016年05月01日 21:52
  • 627

Android实现随触摸移动而变化的效果

Android可以做很多有意思的事情,而这正是我喜欢她的原因。今天会做一个在屏幕上随着手指移动而变化的效果。 步骤如下首先,我们要自定义一个View组件,而这个组件就是在之后会用到的屏幕上移动的小组件...
  • JadynAi
  • JadynAi
  • 2016年03月05日 22:37
  • 507

Android触摸事件(三)-触摸事件类使用实例

触摸事件AbsTouchEvent与TouchUtils的使用 简单方便地实现界面的拖动与缩放功能
  • u011374875
  • u011374875
  • 2016年04月06日 14:19
  • 2324

Android 触摸事件机制(三) View中触摸事件详解

本文将对View中触摸事件相关的内容进行介绍。重点介绍的是dispatchTouchEvent(), onTouchEvent()这两个API以及OnTouchListener接口。 注意:本文...
  • luojiayuan4523
  • luojiayuan4523
  • 2016年05月04日 21:12
  • 623

Android滑屏与子控件点击事件处理

Android滑屏与子控件点击事件处理      想象下面画面描述中的情况,程序如何区分当前用户是想打开程序还是滑动界面?     在android中,触摸屏幕事件逻辑如下: 1.首先调...
  • tomatozq
  • tomatozq
  • 2015年03月23日 15:55
  • 8656

Android自定义控件系列 十:利用添加自定义布局来搞定触摸事件的分发,解决组合界面中特定控件响应特定方向的事件

在写Android应用的过程之中,经常会遇到这样的情况:界面包含了多个控件,我们希望触摸在界面上的不同滑动动作能被不同的控件所接收,或者在界面不同位置滑动的动作能被不同的控件所接收,换句话说,能否让特...
  • ljx19900116
  • ljx19900116
  • 2015年04月27日 16:07
  • 3202

Android利用添加自定义布局来搞定触摸事件的分发,解决组合界面中特定控件响应特定方向的事件

这个例子是比较有用的,基本上可以说,写完这一次,以后很多情况下,直接拿过来addView一下,然后再addInterceptorView一下,就可以轻轻松松的达到组合界面中特定控件来响应特定方向的触摸...
  • qq_21709449
  • qq_21709449
  • 2015年05月21日 15:00
  • 447

Android材料设计动画之触摸反馈

Android材料设计动画之触摸反馈 定制触摸反馈 前言在Android 5.0版本发布时,所公布的Android材料设计之动画更新幅度很大,有各种各样,各种场景下的动画。动画对于增强用户体验的感...
  • myfriend0
  • myfriend0
  • 2017年03月10日 16:35
  • 7774
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android进阶-控件的触摸与点击
举报原因:
原因补充:

(最多只允许输入30个字)