Android实现全局右滑返回

 更新时间:2020年04月20日 09:05:13   作者:qiaaaaao代码  
这篇文章主要为大家详细介绍了Android实现全局右滑返回,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

目前Android手机的全面屏越来越盛行,很多应用都已经支持了右滑返回上一级页面的功能,那么这个功能如何实现呢?

首先来说下思路吧,主要是通过 MotionEvent 这个事件通过对这个事件的不同处理,在通过 PointF 来监听按下去的点,处于什么位置。

接下来,通过代码给大家讲解一下

显示新建一个Gesture的这个样一个类,用来处理,滑动的逻辑。

public class GestureHandler {}

接下来是定义相关的一些屏幕宽高、滑动的区间的一些表示

//屏幕宽高
int sWidth = 1280;
int sHeight = 720;
//按下的点
PointF down;
//Y轴滑动的区间
float minY, maxY;
//按下时的时间
long downTime;
//边缘判定距离,
double margin = sWidth * 0.035;
//Y轴最大区间范围,即Y轴滑动超出这个范围不触发事件
double height = sHeight * 0.2;
//X轴最短滑动距离 X轴滑动范围低于此值不触发事件
double width = sWidth * 0.1;
//是否处于此次滑动事件
boolean work = false;

当然了,这里我的屏幕是这样子,屏幕的宽高是按照自己的实际情况的。

然后是用 PointF 来监听

public boolean point(PointF up) {
  long upTime = System.currentTimeMillis();
  float tWidth = Math.abs(down.x - up.x);
  if (maxY - minY < height && tWidth > width && (upTime - downTime) / tWidth < 2.5) {
   //起点在左边
   if (down.x < margin) {
    left();//左滑需要处理的逻辑的方法
    return true;
   }
   
  }
  return false;
 }

在定义好之后就可以使用MontionEvent,来进行一个处理了

public boolean doEventF(MotionEvent event) {
   switch (event.getActionMasked()) {
   case MotionEvent.ACTION_DOWN:
    //记录下按下的点
    downTime = System.currentTimeMillis();
    down = new PointF(event.getX(), event.getY());
    minY = maxY = down.y;
    //判定是否处于边缘侧滑
    if (down.x < margin || (sWidth - down.x) < margin) work = true;
    break;
   case MotionEvent.ACTION_MOVE:
    //记录滑动Y轴区间
    if (work)
     if (event.getY() > down.y) {
      maxY = event.getY();
     } else {
      minY = event.getY();
      }
    break;
   case MotionEvent.ACTION_UP:
    if (work) {
     handle(new PointF(event.getX(), event.getY()));
     work = false;
     return true;
    }
    work = false;
  }
  
  return work;
 }

那这里是左滑退出当前activity

public void left() {
 
  //处理左边缘滑动事件,这里你可以自己写一个ActivityUtil,用来finish当前的activity(这个网上很多,随便搜一下就有了)
   
}

这里处理好之后,就要思考一下了,如何能达到全局的右滑返回了,那么你就需要让所有的activity继承一个BaseActivity,然后再这个基类里面来处理是否需要右滑返回。

/** 手势监听 */
 GestureHandler mGestureHandler;
 /** 是否需要监听手势关闭功能 */
 private boolean mNeedBackGesture = false;

然后通过一个dispatchTouchEvent 来进行一个手势分发

@Override
 public boolean dispatchTouchEvent(MotionEvent event){
  //TODO Auto-generated method stub
  if (mNeedBackGesture){
   return mGestureHandler.doEventF(event) || super.dispatchTouchEvent(event);
  }
  return super.dispatchTouchEvent(event);
 }

设置一个手势监听,便于一些特殊的activity设置不可滑动退出,比如首页

public final void setNeedBackGesture(boolean mNeedBackGesture){
  this.mNeedBackGesture = mNeedBackGesture;
 }

那么你在使用的时候只需要再onCreate方法里面 new 一个Gesture对象就好了

如果你想在首页做不返回,同样在onCreate方法里面设置setNeedBackGesrure(false)就还可以了

这样你就实现了一个全局的右滑返回了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android 实现加载大图片的方法

    Android 实现加载大图片的方法

    对于超大的图片,如果不缩放的话,容易导致内存溢出。而经过处理后,无论多大的图片,都能够在手机屏幕上加载出来,不会导致内存溢出。本文将对Android 加载大图片的实现方法进行介绍,下面跟着小编一起来看下吧
    2017-04-04
  • Android数据加密之Aes加密

    Android数据加密之Aes加密

    这篇文章主要为大家详细介绍了Android数据加密之Aes加密,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • 快速解决设置Android 23.0以上版本对SD卡的读写权限无效的问题

    快速解决设置Android 23.0以上版本对SD卡的读写权限无效的问题

    今天小编就为大家分享一篇快速解决设置Android 23.0以上版本对SD卡的读写权限无效的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • 详解Android studio 动态fragment的用法

    详解Android studio 动态fragment的用法

    这篇文章主要介绍了Android studio 动态fragment的用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Android利用BitMap获得图片像素数据的方法

    Android利用BitMap获得图片像素数据的方法

    这篇文章主要介绍了Android利用BitMap获得图片像素数据的方法,结合实例对比分析了Android获取图片像素数据的相关技巧,需要的朋友可以参考下
    2016-02-02
  • 如何给Flutter界面切换实现点特效

    如何给Flutter界面切换实现点特效

    这篇文章主要给大家介绍了关于如何给Flutter界面切换实现点特效的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Flutter具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • 教你如何使用platform密钥对apk进行签名

    教你如何使用platform密钥对apk进行签名

    这篇文章主要介绍了教你如何使用platform密钥对apk进行签名,需要的朋友可以参考下
    2014-06-06
  • Android自定义view贝塞尔曲线

    Android自定义view贝塞尔曲线

    这篇文章主要为大家详细介绍了Android自定义view贝塞尔曲线,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • Android 自定义阴影效果详解及实例

    Android 自定义阴影效果详解及实例

    这篇文章主要介绍了Android 自定义阴影效果详解及实例的相关资料,需要的朋友可以参考下
    2017-02-02
  • Andriod使用多线程实现轮播图片

    Andriod使用多线程实现轮播图片

    这篇文章主要介绍了Andriod使用多线程实现轮播图片效果,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-10-10

最新评论