纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

Android全局右滑返回 Android实现全局右滑返回

qiaaaaao代码   2021-04-22 我要评论

目前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)就还可以了

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


相关文章

猜您喜欢

网友评论

Copyright 2020 www.Videogametimes.com 【视游时光】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式