安卓开发学习12-4:Android事件处理和手势:手势检测

手势监听的GestureDetector

安卓实现手势检测需要GestureDetector类,代表一个手势检测器

创建手势检测器需要实现GestureDetector.OnGestureListener接口

package com.example.study2;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentTransaction;

import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TabHost;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener {

    public Long exitTime = 0L;
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
    }
	
	// 手指按下
    @Override
    public boolean onDown(MotionEvent motionEvent) {
        return false;
    }
	
	// down事件发生而move或者up还没发生前触发该事件
    @Override
    public void onShowPress(MotionEvent motionEvent) {

    }
	// 点击后抬起,并且点击后没有滑动
    @Override
    public boolean onSingleTapUp(MotionEvent motionEvent) {
        return false;
    }
	
	// 滚动屏幕
    @Override
    public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
        return false;
    }
	// 长按
    @Override
    public void onLongPress(MotionEvent motionEvent) {

    }
	// 滑动
    @Override
    public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
        return false;
    }
}


触发顺序:onDown->onShowPress->onSingleTapUp

重写的六个方法

创建GestureDetector.OnGestureListener接口的实例需要重写以下六个方法
在这里插入图片描述

实例

1、图片滑动查看

package com.example.study2;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentTransaction;

import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TabHost;
import android.widget.Toast;
import android.widget.ViewFlipper;

public class MainActivity extends AppCompatActivity implements GestureDetector.OnGestureListener {

    int[] imgs = new int[]{R.drawable.img01,R.drawable.img02,R.drawable.img03, R.drawable.img04};
    Animation[] animations = new Animation[4];

    int distance = 100;

    ViewFlipper viewFlipper;

    GestureDetector gestureDetector ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        viewFlipper = findViewById(R.id.view_flipper);

        gestureDetector = new GestureDetector(MainActivity.this, this);
        
        // 想视图滑动器件添加图片视图
        for(int i = 0 ; i < imgs.length ; i++){
            ImageView imageView = new ImageView(MainActivity.this);
            imageView.setImageResource(imgs[i]);
            viewFlipper.addView(imageView);
        }



    }

    @Override
    public boolean onDown(MotionEvent motionEvent) {
        return false;
    }

    @Override
    public void onShowPress(MotionEvent motionEvent) {

    }

    @Override
    public boolean onSingleTapUp(MotionEvent motionEvent) {
        return false;
    }

    @Override
    public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
        return false;
    }

    @Override
    public void onLongPress(MotionEvent motionEvent) {

    }

    @Override
    public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
        // 向左滑
        // motionEvent表示触摸的时候的事件对象,motionEvent1表示手指离开的时候的触摸对象
        if(motionEvent.getX() - motionEvent1.getX() > distance){
            viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.fade_out));
            viewFlipper.showPrevious();
            return true;
        }else if(motionEvent1.getX() - motionEvent.getX() > distance){
            viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.slide_out_right));
            viewFlipper.showNext();
            return true;
        }
        return false;
    }

// 监听器监听触摸事件,进而触发上述的动作
   @Override
    public boolean onTouchEvent(MotionEvent event) {
        return gestureDetector.onTouchEvent(event);
    }
}

手势添加

上述是系统自定义的手势,我们可以自己添加手势

Android移动开发-添加手势以及识别用户手势

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值