Android学习 多读官网,故意健康---手势

官网地址 ttp://developer.android.com/training/gestures/detector.html

一、能够直接覆盖Activity的onTouch方法

public class MainActivity extends Activity {
...
// This example shows an Activity, but you would use the same approach if
// you were subclassing a View.
@Override
public boolean onTouchEvent(MotionEvent event){
       
    int action = MotionEventCompat.getActionMasked(event);
       
    switch(action) {
        case (MotionEvent.ACTION_DOWN) :
            Log.d(DEBUG_TAG,"Action was DOWN");
            return true;
        case (MotionEvent.ACTION_MOVE) :
            Log.d(DEBUG_TAG,"Action was MOVE");
            return true;
        case (MotionEvent.ACTION_UP) :
            Log.d(DEBUG_TAG,"Action was UP");
            return true;
        case (MotionEvent.ACTION_CANCEL) :
            Log.d(DEBUG_TAG,"Action was CANCEL");
            return true;
        case (MotionEvent.ACTION_OUTSIDE) :
            Log.d(DEBUG_TAG,"Movement occurred outside bounds " +
                    "of current screen element");
            return true;      
        default :
            return super.onTouchEvent(event);
    }      
}

二:也能够给单个的view设置监听器

View myView = findViewById(R.id.my_view);
myView.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        // ... Respond to touch events      
        return true;
    }
});

三:可是 onTouch方法毕竟仅仅能检測一些简单的手势,像滑动、双击、长按等。单用onTouch方法处理就显得棘手了,谷歌提供了方便的  GestureDetector 类来更方便的处理手势。

详细的须要实例  GestureDetectorCompat 类, 该类中的构造方法须要实现
监听器。GestureDetector.OnGestureListener 去通知用户,当各种事件(滑动、双击、长按等)发生。为了使 GestureDetector 正常监听事件,同一时候须要重写Activity的
nTouch方法。把事件交给Detector。

详细见官网demo:

public class MainActivity extends Activity implements
        GestureDetector.OnGestureListener,
        GestureDetector.OnDoubleTapListener{
   
    private static final String DEBUG_TAG = "Gestures";
    private GestureDetectorCompat mDetector; 

    // Called when the activity is first created.
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Instantiate the gesture detector with the
        // application context and an implementation of
        // GestureDetector.OnGestureListener
        mDetector = new GestureDetectorCompat(this,this);
        // Set the gesture detector as the double tap
        // listener.
        mDetector.setOnDoubleTapListener(this);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event){
        this.mDetector.onTouchEvent(event);
        // Be sure to call the superclass implementation
        return super.onTouchEvent(event);
    }

    @Override
    public boolean onDown(MotionEvent event) {
        Log.d(DEBUG_TAG,"onDown: " + event.toString());
        return true;
    }

    @Override
    public boolean onFling(MotionEvent event1, MotionEvent event2,
            float velocityX, float velocityY) {
        Log.d(DEBUG_TAG, "onFling: " + event1.toString()+event2.toString());
        return true;
    }

    @Override
    public void onLongPress(MotionEvent event) {
        Log.d(DEBUG_TAG, "onLongPress: " + event.toString());
    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
            float distanceY) {
        Log.d(DEBUG_TAG, "onScroll: " + e1.toString()+e2.toString());
        return true;
    }

    @Override
    public void onShowPress(MotionEvent event) {
        Log.d(DEBUG_TAG, "onShowPress: " + event.toString());
    }

    @Override
    public boolean onSingleTapUp(MotionEvent event) {
        Log.d(DEBUG_TAG, "onSingleTapUp: " + event.toString());
        return true;
    }

    @Override
    public boolean onDoubleTap(MotionEvent event) {
        Log.d(DEBUG_TAG, "onDoubleTap: " + event.toString());
        return true;
    }

    @Override
    public boolean onDoubleTapEvent(MotionEvent event) {
        Log.d(DEBUG_TAG, "onDoubleTapEvent: " + event.toString());
        return true;
    }

    @Override
    public boolean onSingleTapConfirmed(MotionEvent event) {
        Log.d(DEBUG_TAG, "onSingleTapConfirmed: " + event.toString());
        return true;
    }
}

补充:
onScroll:在屏幕上慢慢的滚动。


onFling:在屏幕上高速的滚动,并高速移开手指。


Whether or not you use GestureDetector.OnGestureListener, it‘s best practice to implement an onDown()method that returns true. This is because all gestures begin with an onDown() message. If you return false fromonDown(), as GestureDetector.SimpleOnGestureListener does by default, the system assumes that you want to ignore the rest of the gesture, and the other methods of GestureDetector.OnGestureListener never get called. This has the potential to cause unexpected problems in your app. The only time you should return false fromonDown() is if you truly want to ignore an entire gesture.

另外,官网上说最好复写onDown方法,并返回true,由于其它方法的消息都是从onDown方法開始的。并且onDown系统默认返回false,其它的方法也不会被调用。

但是我自己试了下,当onDown方法返回false,其它方法是能够被调用的。。这就奇怪了。。。哪位高手亲试过这个样例的,回复下。。

??

时间: 2024-08-14 01:25:17

Android学习 多读官网,故意健康---手势的相关文章

Android学习 多读官网,有益健康---手势

官网地址 ttp://developer.android.com/training/gestures/detector.html: 一.可以直接覆盖Activity的onTouch方法 public class MainActivity extends Activity { ... // This example shows an Activity, but you would use the same approach if // you were subclassing a View. @O

Android Studio 1.0 官网下载链接

Android Studio 1.0 是作为稳定版本发布的,现已提供下载:Android 开发者网站 但官网下载页面http://developer.android.com/sdk/index.html  国内很多时候打不开,下载链接贴在迅雷上倒是可以下载. 所以这里把官网的下载链接贴一下,方便以后需要的时候下载. SDK Tools Only http://dl.google.com/android/android-sdk_r24-windows.ziphttp://dl.google.com

【Spark深入学习 -16】官网学习SparkSQL

----本节内容-------1.概览        1.1 Spark SQL        1.2 DatSets和DataFrame2.动手干活        2.1 契入点:SparkSession        2.2 创建DataFrames        2.3 非强类型结果集操作        2.4 程序化执行SQL查询        2.5 全局临时视图        2.6 创建DataSets        2.7 与RDD交互操作        2.8 聚集函数3.Sp

android测试工具MonkeyRunner--google官网翻译

最近在复习之前的笔记,在回顾MonkeyRunner时看了看google官网的内容,写得不错,就翻译出来分享下.其实google官网真是一个学习的好地方. 基础知识 MonkeyRunner工具提供了一个API用于在Android代码之外控制Android设备和模拟器.通过MonkeyRunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上.monkeyrunner工具的主要设计目的是用于测试功能

android之Fragment(官网资料翻译)

Fragment要点 Fragment作为Activity界面的一部分组成出现 可以在一个Activity中同时出现多个Fragment,并且,一个Fragment亦可在多个Activity中使用. 在Activity运行过程中,可以添加.移除或者替换Fragment(add().remove().replace()) Fragment可以响应自己的输入事件,并且有自己的生命周期,当然,它们的生命周期直接被其所属的宿主activity的生命周期影响. 设计哲学 Android在3.0中引入了fr

Android 5.0 开发者官网知识结构疏理

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. Quicknav 设计 Design 开发 Develop 发布 Distribute Links Google Play Developer C

JavaScript学习---廖雪峰官网---1

1.学习谷歌浏览器的源码.断点等调试功能. 2.js的数据类型: Number: 123.0.123.1.23e3.-99.NaN(表示 不是一个number.记住它与任何数都不等,包括它自己.判断isNaN()).Infinity(表示无限大). 字符串: 布尔值: null: underfined: 数组: 对象: es6新引入的数据类型: map(引入的原因,因为js中对象的键必须是字符串,不可以是其他类型变量.): map是一组键值对结果,具有极快的查找速度 var map = new

Hadoop学习之从官网下载安装包

Hadoop是一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储.要学习Hadoop从下载安装包开始 打开Hadoop的官方网站,点击Download Hadoop 或点击"Getting Started"节中的 Download Hadoop from the release page. 点击Download 点击Download a release now! 这里会显示一些下载的镜像站点,

Drupal8学习之路--官网文档碎碎记--主题篇

主要记录一些琐碎的知识点. 1."In Drupal 8 drupal_add_css(), drupal_add_js() and drupal_add_library()were removed in favor of #attached" 在Drupal8中,drupal_add_css(), drupal_add_js(), 和drupal_add_library()被去除以了.只支持以#attached的方式来附加css或者js. 原文地址:https://www.cnblo