Android右滑返回上一界面

今天突然心血来潮,想在自己的项目里面加一个右滑finish界面的功能。思路很简单就是拦截屏幕滑动事件,然后finish当前页面,不多说了,上代码吧。

第一步:利用VelocityTracker计算滑动速度,及一些附带的代码。

private VelocityTracker mVelocityTracker = null;//速度记录器

private int getScrollVelocity() {

mVelocityTracker.computeCurrentVelocity(1000);

int velocity = (int) mVelocityTracker.getXVelocity();

return Math.abs(velocity);

}

/**

* 回收VelocityTracker对象。

*/

private void recycleVelocityTracker() {

mVelocityTracker.recycle();

mVelocityTracker = null;

}

/**

* 创建VelocityTracker对象,并将触摸content界面的滑动事件加入到VelocityTracker中。

*

* @param event

*

*/

private void createVelocityTracker(MotionEvent event) {

if (mVelocityTracker == null) {

mVelocityTracker = VelocityTracker.obtain();

}

mVelocityTracker.addMovement(event);

}

第二步:在activity拦截滑动事件,注意如果是重写TouchEvent是先到界面子控件之后才会传递到这个方法中,所以可能导致界面中只有极少的部分能够获取到滑动事件。

private float xDown, xMove;

//手指向右滑动时的最小速度

private static final int XSPEED_MIN = 200;

//手指向右滑动时的最小距离

private static final int XDISTANCE_MIN = 150;

@Override

public boolean dispatchTouchEvent(MotionEvent ev) {

// TODO Auto-generated method stub

createVelocityTracker(ev);

switch (ev.getAction()) {

case MotionEvent.ACTION_DOWN:

xDown = ev.getRawX();

break;

case MotionEvent.ACTION_MOVE:

xMove = ev.getRawX();

//活动的距离

int distanceX = (int) (xMove - xDown);

//获取顺时速度

int xSpeed = getScrollVelocity();

if (distanceX > XDISTANCE_MIN && xSpeed >XSPEED_MIN){

finish();

}

break;

case MotionEvent.ACTION_UP:

recycleVelocityTracker();

break;

default:

break;

}

return super.dispatchTouchEvent(ev);

}

Android右滑返回上一界面

时间: 2024-12-30 01:11:48

Android右滑返回上一界面的相关文章

在UINavigationController自定义返回按钮后实现手势右滑到上一级界面(interactivePopGestureRecognizer)

在iOS7中,新增加了一个小小的功能,也就是这个self.navigationController.interactivePopGestureRecognizer. 1.情景概况: 在UINavigationController自定义返回按钮后无法实现手势右滑到上一级界面. 2.解决方案: self.navigationController.interactivePopGestureRecognizer.delegate 默认是<_UINavigationInteractiveTransitio

iOS 开发 右滑返回上一级控制器

#import <objc/runtime.h> @interface UINavigationController (Transition)<UIGestureRecognizerDelegate> - (void)transitionPanGestureDidLoad; @end @interface DLNavigationTransition () @end @implementation DLNavigationTransition /** *  启动右滑pop */ +

右滑返回ios

[转载请注明出处] iOS 7中在传统的左上角返回键之外,提供了右滑返回上一级界面的手势.支持此手势的是UINavigationController中新增的属性 interactivePopGestureRecognizer,即右滑返回只支持以UINavigationController为容器的ViewController间切换,要想在自定义容器中使用,需要一些额外的工作. 基本地,控制ViewController是否启用右滑返回,只需要这样:  .navigationController.in

Android - 返回上一个界面finish()方法

返回上一个界面finish()方法 本文地址: http://blog.csdn.net/caroline_wendy Android可以使用finish()方法,实现函数返回的功能,当不是Activity内部调用时,需要使用getActivity()方法的返回值Activity调用. 如实现了一个提示框(AlertDialog),包含两个按钮,返回和设置: 一个是跳转定位服务设置界面,一个是返回上一级界面. DialogFragment mLocationDialog = new AlertD

全新的手势,侧滑返回、全局右滑返回都OUT啦!

前言 Android快速开发框架-ZBLibrary 最近将以前的 全局右滑返回 手势功能改成了 底部左右滑动手势. 为什么呢?为了解决滑动返回手势的问题. 目前有3种滑动返回手势 一.侧滑返回 代表app: 微信(带跟手动画) 问题: 屏幕尺寸超过一定大小(按正常手掌大小和手指长度算,最大可掌握尺寸为4.7寸)会导致用户右手持机时手指够不到左侧滑动手势触发区域. 即便勉强够到,失败率也很高,失败几次后用户就不想再用了. 二.全局右滑返回 代表app: 酷狗音乐(带跟手动画).QQ(无跟手动画)

App开发流程之右滑返回手势功能

iOS7以后,导航控制器,自带了从屏幕左边缘右滑返回的手势功能. 但是,如果自定义了导航栏返回按钮,这项功能就失效了,需要自行实现.又如果需要修改手势触发范围,还是需要自行实现. 广泛应用的一种实现方案是,采用私有变量和Api,完成手势交互和返回功能,自定义手势触发条件和额外功能. 另一种实现方案是,采用UINavigationController的代理方法实现交互和动画: - (nullable id <UIViewControllerInteractiveTransitioning>)na

SwipeBackLayout的使用方法,右滑返回

使用方法: 需要右滑返回的activity继承baseActivity就可以, 如: public class SettingActivity extends BaseActivity {} 为防止滑动出现黑屏效果,记得需要定义 <!-- 滑动activity必须使用该主题,防侧滑时黑屏 --> <style name="NoTitleBarTheme" parent="AppBaseThemeSwipe"></style> &l

swift 关于FDFullscreenPopGesture的右滑返回

关于导航栏右滑返回的工具库 FDFullscreenPopGesture 是 OC 版本,用了 runtime 等各种骚操作 关于 swift ,我在 UINavigationController 的 viewDidLoad 方法中 class GMNavigationController: UINavigationController { override func viewDidLoad() { super.viewDidLoad() self.addPanGes() } /// 将导航栏的

想要隐藏navigationBar,同时又想支持右滑返回功能

如果直接设置 self.navigationBarHidden = YES; 那同时也会屏蔽右滑返回功能. 解决办法1: self.navigationBarHidden = NO; self.navigationBar.hidden = YES; 解决办法2: self.navigationBarHidden = NO; self.interactivePopGestureRecognizer.delegate = self;