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

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

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

(0)

相关推荐

  • Android使用Photoview实现图片左右滑动及缩放功能

    我想,不管是做什么样的app.一般都会涉及到图片点击方法,和左右滑动的功能吧.今天我就把自己的实现拿来分享一下.图片的加载用到了picasso的图片加载工具. 第一步:注入依赖 compile 'com.squareup.picasso:picasso:2.5.2' compile 'com.github.chrisbanes:PhotoView:1.3.0' 第二步,我们就来实现这个功能.多张图片左右滑动,这需要用到ViewPager这个类. 且看布局: <uk.co.senab.photov

  • android实现上下左右滑动界面布局

    本文实例为大家分享了android实现滑动界面布局的具体代码,供大家参考,具体内容如下 1.我使用的是ScrollView嵌套HorizontalScrollView让ScrollView负责上下滑动HorizontalScrollView负责左右滑动 2.以下代码提供了思路和完成手段,请根据具体业务去进行修改,我试过使用recyclerview进行自定义,发现一旦有了复杂业务之后会掉帧卡顿所以使用了这种方法 XML布局 <?xml version="1.0" encoding=

  • Android实现九宫格横向左右滑动

    项目中大多都会有很多的分类,且左右滑动,如美团首页(下图): 不难发现包含2部分内容:1.左右滑动的页面,2.指示器. 大度一般都会想到,viewPager+GridView,这里介绍另外的的一种方法,也做下记录: GridViewPager+MagicIndicator(万能指示器) 一.引入build.gradle compile 'com.yhy:gvp:1.1.0' compile 'com.github.hackware1993:MagicIndicator:1.5.0' 如果报错,在

  • 如何在Android中实现左右滑动的指引效果

    本文的目的是要实现左右滑动的指引效果.那么什么是指引效果呢?现在的应用为了有更好的用户体验,一般会在应用开始显示一些指引帮助页面,使用户能更好的理解应用的功能,甚至是一些新闻阅读器会把一些头条新闻以指引效果的形式显示.说个最基本的,就是我们的手机主屏幕就是这种效果. 下面我们就开始实现我们的左右滑动指引效果.为了大家更好的理解,我们先看下实现效果,如下图所示:     在这里,我们需要用到google提到的一个包--android-support-v4.jar,这个包包含了一些非常有用的类,其中

  • Android仿微信左右滑动点击切换页面和图标

    本文实例为大家分享了Android仿微信左右滑动点击切换页面和图标的具体代码,供大家参考,具体内容如下 目标效果: 使用鼠标滑动屏幕或者点击下边的小图标,可以更改页面和图标,因为没有那么多素材所以只用了两张图片区分. 1.layout文件夹下新建top.xml页面,作为顶部标题. top.xml页面: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="h

  • Android ViewPager实现左右滑动翻页效果

    本文实例为大家分享了ViewPager实现左右滑动翻页效果展示的具体代码,供大家参考,具体内容如下 代码如下: package com.example.demo; import java.util.ArrayList; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import a

  • Android自定义可左右滑动和点击的折线图

    前言 前几天有小盆友让我写一个折线图,可以点击,可以左右滑动.对于折线肯定有很多项目都使用过,所以网上肯定也有很多demo,像AndroidChart.HelloChart之类的,功能相当丰富,效果也很赞,但是太重了,其他的小demo又不符合要求,当然了,我写的自定义折线图的思想也有来自这些小demo,对他们表示感谢. 效果图 废话不多说,先上效果图: 效果是不是很赞,如果上图满足你的需求,那就继续往下看. 自定义折线图的步骤: 1.自定义view所需要的属性 确定所需要的自定义view的属性,

  • android中使用Activity实现监听手指上下左右滑动

    用Activity的onTouchEvent方法实现监听手指上下左右滑动 应用了Activity的ontouchEvent方法监听手指点击事件,手指滑动的时候会先按下,滑倒另一个地方再抬起,我们就可以根据按下的坐标和抬起的坐标算出用户是往哪一个方向滑动了. package com.example.testtt; import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; impor

  • Android手势左右滑动效果

    最近想实现Android左滑弹出菜单框,右滑消失菜单这个个功能.了解了一下Android 的滑动事件,必须是在view组件或者Activity上实现,同时必须实现OnTouchListener, OnGestureListener这个两个接口. public class MyRelativeLayout extends RelativeLayout implements GestureDetector.OnGestureListener{ private float mPosX, mPosY,

  • Android左右滑出菜单实例分析

    现在的Android应用,只要有一个什么新的创意,过不了多久,几乎所有的应用都带这个创意.这不,咱们公司最近的一个持续性的项目,想在首页加个从左滑动出来的菜单,我查阅网上资料,并自己摸索,实现了左.右两边都能滑出菜单,并且,左.右菜单中,都可以加ListView等这类需要解决GestureDetector冲突的问题(如在首页面中,含有ListView,上下滚动时,左右不动,相反,左右滑动菜单时,上下不动,听着头就大了吧!) 先上几张图,给大家瞧瞧,对整体有个了解:  一.首页布局: 复制代码 代

随机推荐