Iwfu-安卓Gesture手势(1)-初步

本文介绍在安卓中如何使用GestureDetector类实现手势监听功能,包括创建手势检测器并绑定监听,以及为Activity绑定事件监听器。文章详细解释了各种手势操作对应的回调方法及其触发时机。

安卓中监听手指滑动手势不仅可以重写onTouch(),还可以通过安卓自带的Gesture手势类来判断,使用起来也比较简单易懂。

简单来说使用方法就两步:

 1-创建GestureDetector手势检测器,并在创建时绑定监听

 2-为应用程序的activity/特定组件,绑定事件监听器。在事件处理中

 把对应activity/组件的onTouchEvent事件交给GestureDector处理

让要处理手势监听的Activity实现GestureDetector.OnGestureListener接口,重写其中的方法,
这些方法分别对应了不同的手势操作。在代码里有详细注释:

package com.chan.gesture;

import android.annotation.TargetApi;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;

public class MainActivity extends AppCompatActivity
        implements
            GestureDetector.OnGestureListener {

    //声明手势检测器
    private GestureDetector gestureDetector;

    //Android M以上可以使用
    @TargetApi (Build.VERSION_CODES.M)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*-1-初始化监听器,传入上下文参数和事件监听*/
        gestureDetector = new GestureDetector (this,this);

    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        /*-2-将这个Activity的触摸事件交给监听器处理*/
        return gestureDetector.onTouchEvent(event);
    }

    @Override
    /* 手指按下的一刻触发 */
    public boolean onDown(MotionEvent e) {
        Log.d("tag", "onDown");
        return false;
    }

    @Override
    /* 手指按在屏幕上,在按下的一刻,长按之前执行 ,即按下的时间既大于点击又小于长按*/
    public void onShowPress(MotionEvent e) {
        Log.d("tag", "onShowPress");
    }

    @Override
    /* 手指离开触摸屏的时候触发 */
    public boolean onSingleTapUp(MotionEvent e) {
        Log.d("tag", "onSingleTapUp");
        return false;
    }

    @Override
    /* 手指滑动触发 */
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
            float distanceY) {
        Log.d("tag", "onScroll");

        return false;
    }

    @Override
    /* 手指长按 */
    public void onLongPress(MotionEvent e) {
        Log.d("tag", "onLongPress");
        Intent intent = new Intent (MainActivity.this,Activity2.class);
        startActivity (intent);
    }

    @Override
    /* 手指抛掷(快速划屏幕后松开) */
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {
        Log.d("tag", "onFling");

        return false;
    }

}

在每个重写的方法里添加了输出语句,然后运行起来在屏幕上滑动,点击等各种操作,最后总结出这些重写的方法调用时机与真实的手势操作直接的关系,如下:

 点击: onDown--onSingleTapUp

 长按未抬起: onDown-- onShowPress -- onLongPress

 还未达到长按就抬起: onDown -- onShowPress -- onSingleTapUp

 迅速滑动: onDown -- onScroll.... -- onFling

 慢速拖动:onDown -- onScroll....

清楚了每个回调方法调用的时机后,就可以在相应的回调方法里进行一些操作。

下一篇:安卓Gesture手势(2)-实现多点触控控制图片的放大缩小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值