博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[android] 手机卫士手势滑动切换屏幕
阅读量:5879 次
发布时间:2019-06-19

本文共 2468 字,大约阅读时间需要 8 分钟。

定义手势识别器

获取手势识别器GestureDetector对象,通过new GestureDetector(context,listener),参数:上下文,监听器

匿名内部类实现简单手势监听器SimpleOnGestureListener接口,重写onFling()滑动方法

传递进来四个参数:

MotionEvent e1 MotionEvent e2velocityXvelocityY

e1是第一个点,e2是第二个点,x轴的速度,y轴的速度

当第一个点减去第二个点大于200时,我们认为它是从右往左划,下一页

当第二个点减去第一个点大于200时,我们认为它是从左往右划,上一页

调用MotionEvent 对象的getRawX()可以获取到X轴的坐标

 

使用手势识别器识别手势

重写activityonTouchEvent()方法,获取到手势在界面上的滑动事件

传递进来一个参数MotionEvent对象

调用GestureDetector对象的onTouchEvent(event)方法,参数:MotionEvent对象,把获取到的事件传递进去

 

屏蔽斜着划

两个点的y轴坐标之间的距离大于100时,我们认为它是斜着划的

调用MotionEvent 对象的getRawY()可以获取到Y轴的坐标,两个点的差值取绝对值Math.abs(),判断大于100 就返回true,不往下进行

 

如果找不到SimpleOnGestureListener类,使用new GestureDetector.SimpleOnGestureListener()

 

抽取公用方法到基类抽象类 BaseSecActivity中,自己的activity只需要继承这个基类,实现上下页的抽象方法,就能实现左右滑动效果

BaseSecGuideActivity.java

 

package com.qingguow.mobilesafe;import android.app.Activity;import android.os.Bundle;import android.view.GestureDetector;import android.view.MotionEvent;public abstract class BaseSecGuideActivity extends Activity {    // 定义手势识别器    protected GestureDetector gestureDetector;    @Override    protected void onCreate(Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onCreate(savedInstanceState);        // 实例化        gestureDetector = new GestureDetector(this,                new GestureDetector.SimpleOnGestureListener() {                    @Override                    public boolean onFling(MotionEvent e1, MotionEvent e2,                            float velocityX, float velocityY) {                        //屏蔽斜着划                        if(Math.abs(e1.getRawY()-e2.getRawY())>100){                            return true;                        }                        if ((e1.getRawX() - e2.getRawX()) > 100) {                            System.out.println("从右往左划,下一页");                            showNext();                            return true;                        }                        if ((e2.getRawX() - e1.getRawX()) > 100) {                            System.out.println("从左往右划,上一页");                            showPre();                            return true;                        }                        return super.onFling(e1, e2, velocityX, velocityY);                    }                });    }    public abstract void showPre();    @Override    public boolean onTouchEvent(MotionEvent event) {        gestureDetector.onTouchEvent(event);        return super.onTouchEvent(event);    }    public abstract void showNext();}

 

转载地址:http://pndix.baihongyu.com/

你可能感兴趣的文章
多媒体工具Mediainfo
查看>>
1-小程序
查看>>
CentOS图形界面和命令行切换
查看>>
HTML5通信机制与html5地理信息定位(gps)
查看>>
Mind_Manager_2
查看>>
手动升级 Confluence - 规划你的升级
查看>>
汽车常识全面介绍 - 悬挂系统
查看>>
电子政务方向:We7.Cloud政府云门户
查看>>
ansible 基本操作(初试)
查看>>
更改tomcat的根目录路径
查看>>
51nod 1292 字符串中的最大值V2(后缀自动机)
查看>>
加快ALTER TABLE 操作速度
查看>>
学习笔记之软考数据库系统工程师教程(第一版)
查看>>
PHP 程序员的技术成长规划
查看>>
memcached 分布式聚类算法
查看>>
jquery css3问卷答题卡翻页动画效果
查看>>
$digest already in progress 解决办法——续
查看>>
虚拟机 centos设置代理上网
查看>>
Struts2中Date日期转换的问题
查看>>
mysql 数据类型
查看>>