关闭

Activity简单几步支持向右滑动返回

标签: 滑动返回
1817人阅读 评论(5) 收藏 举报
分类:

     向右滑动返回,对于屏幕过大的手机来说,在单手操作时,是一个不错的用户体验,用户不必再费力的或者用另一个手去点击屏幕左上角的返回按钮或者,手机右下角的返回按钮,轻轻向右滑动屏幕即可返回上一页,这个功能如今大部分APP都已经支持啦,你的APP支持了吗?

     自己在网上百度了一些滑动返回的方法,有的是用的第三方控件如swipebackLayout但弊端过大如与自己自定义的一些控件冲突等,有的是通过判断手势监听但步骤相当繁琐,总之没有尽如人意的,本篇所讲的实现方法其实也是通过监听事件分发来实现的,但是步骤非常简单,且效果经本人不断测试也相当不错,接下来本人讲解下实现过程:

实现该功能需同时满足几个条件,并要考虑用户的操作意图,既要保证足够的灵敏度,不要出现向右滑动好多次还没返回上一页的情况,也不要出现本来是想上下滑动(斜着上下滑动)而非向右滑动返回,也被判断为向右滑动返回而结束了当前界面,那么我们需要满足:


1.用户需向右滑动一段距离,且X轴距离>某一设定的值;

2.因为向右滑动时,不可能时严格的水平方向而不向Y轴偏移,所以向Y轴的偏移量不能超过某一设定的值,否则认为用户意图不是滑动返回而是上下滑动;


3.在测试过程中,如果用户意图是上下滑动时,那么手指在y轴移动速度(我们按每秒移动的像素值,可通过VelocityTracker类计算)非常大,通常在几千到过万,而在正常的水平滑动时,y轴的移动速度通常只有100左右,因此,我们需要判断的是,如果y轴上手指滑动速度超过某一设定值(本人将该值设置为了1000),则认为用户意图是上下滑动而非向右滑动返回;

好了,接下来我们便可自定义一个SlideBackActivity继承Activity,并在SlideBackActivity中重写事件分发dispatchTouchEvent,并记录手指按下,移动的距离及手指滑动速度,从而判断用户的意图,完整代码:

/**
 * 支持滑动返回
 * 继承该Activity则支持滑动返回
 * @author 白玉梁
 */
public class SlideBackActivity extends Activity{
	
	 //手指上下滑动时的最小速度  
    private static final int YSPEED_MIN = 1000;  
      
    //手指向右滑动时的最小距离  
    private static final int XDISTANCE_MIN = 50;  
    
    //手指向上滑或下滑时的最小距离  
    private static final int YDISTANCE_MIN = 100;  
      
    //记录手指按下时的横坐标。  
    private float xDown;  
    
    //记录手指按下时的纵坐标。  
    private float yDown;  
      
    //记录手指移动时的横坐标。  
    private float xMove;  
    
    //记录手指移动时的纵坐标。  
    private float yMove;
      
    //用于计算手指滑动的速度。  
    private VelocityTracker mVelocityTracker;  
	
	
	@Override  
    public boolean dispatchTouchEvent(MotionEvent event) {  
        createVelocityTracker(event);  
        switch (event.getAction()) {  
        case MotionEvent.ACTION_DOWN:  
            xDown = event.getRawX();  
            yDown = event.getRawY();  
            break;  
        case MotionEvent.ACTION_MOVE:  
            xMove = event.getRawX();  
            yMove= event.getRawY();  
            //滑动的距离  
            int distanceX = (int) (xMove - xDown);  
            int distanceY= (int) (yMove - yDown);  
            //获取顺时速度  
            int ySpeed = getScrollVelocity();  
            //关闭Activity需满足以下条件:
            //1.x轴滑动的距离>XDISTANCE_MIN
            //2.y轴滑动的距离在YDISTANCE_MIN范围内
            //3.y轴上(即上下滑动的速度)<XSPEED_MIN,如果大于,则认为用户意图是在上下滑动而非左滑结束Activity
            if(distanceX > XDISTANCE_MIN &&(distanceY<YDISTANCE_MIN&&distanceY>-YDISTANCE_MIN)&& ySpeed < YSPEED_MIN) {  
                finish();  
            }  
            break;  
        case MotionEvent.ACTION_UP:  
            recycleVelocityTracker();  
            break;  
        default:  
            break;  
        }  
        return super.dispatchTouchEvent(event);
    }  
      
    /** 
     * 创建VelocityTracker对象,并将触摸界面的滑动事件加入到VelocityTracker当中。 
     *  
     * @param event 
     *         
     */  
    private void createVelocityTracker(MotionEvent event) {  
        if (mVelocityTracker == null) {  
            mVelocityTracker = VelocityTracker.obtain();  
        }  
        mVelocityTracker.addMovement(event);  
    }  
      
    /** 
     * 回收VelocityTracker对象。 
     */  
    private void recycleVelocityTracker() {  
        mVelocityTracker.recycle();  
        mVelocityTracker = null;  
    }  
      
    /** 
     *  
     * @return 滑动速度,以每秒钟移动了多少像素值为单位。 
     */  
    private int getScrollVelocity() {  
        mVelocityTracker.computeCurrentVelocity(1000);  
        int velocity = (int) mVelocityTracker.getYVelocity();  
        return Math.abs(velocity);  
    }  
	
}


3
0
查看评论

Activity右滑返回效果实现

Activity右滑返回效果实现Activity右滑返回效果实现 实现思路 实现过程 1 SwipeBackLayout的关键代码 2 Activity 背景透明处理 问题总结 1 遇到的疑难问题 2 问题的解决 如何使用1. 实现思路 我们想要对一个Activity整体进行滑动,我们就需要对这个A...
  • Jasen923
  • Jasen923
  • 2016-01-18 11:04
  • 663

实现Activity的滑动返回效果

介绍在知乎客户端上看到了这种效果,左滑Activity可以返回到上一界面,非常适合单手操作。 找了很久,终于在github上看到了SwipeBackLayout这个开源项目,地址: https://github.com/ikew0ng/SwipeBackLayout 实现需要使用到的类:Swi...
  • liuye09043124
  • liuye09043124
  • 2015-06-12 18:19
  • 2779

Android 使用SwipeBackLayout实现滑动返回上一级页面——实战来袭

Android使用SwipeBackLayout快速实现滑动返回上一级页面
  • zuiwuyuan
  • zuiwuyuan
  • 2016-03-30 23:32
  • 5861

100行代码实现Activity右滑退出

很多Android App上已经增加了Activity右滑退出的效果,这个功能通常可以叫做SwipeBackActivity。这个效果最早来源于iOS,这样的操作优化确实提升了用户体验。在github上大概看了一下,实现很多也比较复杂,要么需要继承一个类或者View,要么需要设置一些属性。本文将介绍...
  • goodlixueyong
  • goodlixueyong
  • 2016-04-13 20:18
  • 3825

Activity滑动返回的Demo

  • 2015-06-15 10:50
  • 5.51MB
  • 下载

android Activity右滑返回,退出当前activity

发现目前很多app应用,都具有左滑返回的功能,而且感觉体验很是愉快,尤其酷狗音乐左滑返回的实现,更是炫酷。今天就学习一下具体实现。 先看一下效果图吧:    开发前准备,有两种方案:  1:添加库文件,点击下载(推荐用这种)  2:添加依赖 co...
  • birthmarkqiqi
  • birthmarkqiqi
  • 2017-10-13 11:30
  • 174

Android Activity向右滑动返回

 向右滑动返回,对于屏幕过大的手机来说,在单手操作时,是一个不错的用户体验,用户不必再费力的或者用另一个手去点击屏幕左上角的返回按钮或者,手机右下角的返回按钮,轻轻向右滑动屏幕即可返回上一页,这个功能如今大部分APP都已经支持啦,你的APP支持了吗? 自己在网上百度了一些滑动返回的方法,...
  • hqiong208
  • hqiong208
  • 2015-07-13 11:51
  • 515

android实现向右滑动返回功能

在ios7中,苹果的原生态应用几乎都能够通过向右滑动来返回到前一个页面,这样可以避免用户在单手操作时用大拇指去点击那个遥远的返回键(iphone5的这种返回被吐糟为反人类设计)。然而现在android的手机市场上几乎很难找到小于4寸屏的手机了,几乎所有的应用都是通过点击左上角的返回来退到上一个页面,...
  • ff20081528
  • ff20081528
  • 2014-01-04 17:42
  • 34479

Activity简单几步支持向右滑动返回

Activity简单几步支持向右滑动返回
  • sinat_28238111
  • sinat_28238111
  • 2016-04-08 11:03
  • 195

实现Activity侧滑返回效果

实现Activity侧滑返回效果,通过ViewDragHelper来检测到屏幕侧滑,然后通过内置接口传递给Acitivity触发了侧滑事件,通知其关闭。实现Activity侧滑返回效果
  • zhiwenyan
  • zhiwenyan
  • 2016-10-27 16:04
  • 1257
    个人资料
    • 访问:356545次
    • 积分:4789
    • 等级:
    • 排名:第7155名
    • 原创:95篇
    • 转载:10篇
    • 译文:0篇
    • 评论:395条
    我的微博
    微信公众号AndroidMax
    博客专栏
    最新评论