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

来源:互联网 发布:网络组织结构 编辑:程序博客网 时间:2024/06/05 02:24

安卓中监听手指滑动手势不仅可以重写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)-实现多点触控控制图片的放大缩小。

0 0
原创粉丝点击