android实现向右滑动返回功能

转载 2015年07月10日 22:46:52
[置顶] android实现向右滑动返回功能
分类: android 12415人阅读 评论(19) 收藏 举报

目录(?)[+]

	在ios7中,苹果的原生态应用几乎都能够通过向右滑动来返回到前一个页面,这样可以避免用户在单手操作时用大拇指去点击那个遥远的返回键(iphone5的这种返回被吐糟为反人类设计)。然而现在android的手机市场上几乎很难找到小于4寸屏的手机了,几乎所有的应用都是通过点击左上角的返回来退到上一个页面,如果单手拿一个大屏手机,我是觉得会发疯。为此花了点时间写了个向右滑动返回的demo。
效果如下图:
此图为点击第一个Activity跳转到第二个Activity后,向右滑动再返回到第一个Activity。
一、设计思路
1,让一个activity中的根布局实现onTouchListener接口,当手指在屏幕上向右滑动时,我们记下ACTION_DOWN的X轴的位置,在手指滑动时(即ACTION_MOVE),获取滑动时的X轴的位置,当滑动的位置大于某个临界值且在这个方向上的速度大于某个临界值时,我们就认为用户滑动手指的意图是返回上一个页面。
2,按照这种思路下来,我们做出来的向右滑动可以实现这个功能,但是会感觉很生硬,没有任何的过度就返回到上一个页面了,为此,在这里为activity加上了启动和结束的过度动画。这就是实现的思路,非常简单,下面看代码吧。
二、主要的代码

这个demo中,我写了三个activity,activity1可以跳转到activity2,activity2可以跳转到activity3,activity3可以滑动返回到activity2,activity2可以滑动返回到activity1。主要的逻辑代码都放在了Activity2中,代码如下:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package org.sunday.slidingreturn;  
  2.   
  3. import com.example.slidingreturn.R;  
  4.   
  5. import android.app.Activity;  
  6. import android.content.Intent;  
  7. import android.os.Bundle;  
  8. import android.view.MotionEvent;  
  9. import android.view.VelocityTracker;  
  10. import android.view.View;  
  11. import android.view.View.OnClickListener;  
  12. import android.view.View.OnTouchListener;  
  13. import android.widget.Button;  
  14. import android.widget.LinearLayout;  
  15.   
  16. /** 
  17.  *  
  18.  * @author sunday 
  19.  *  2014-1-4 
  20.  *  zhengchao1937@163.com 
  21.  */  
  22. public class SecondActivity extends Activity implements OnTouchListener {  
  23.       
  24.     //手指向右滑动时的最小速度  
  25.     private static final int XSPEED_MIN = 200;  
  26.       
  27.     //手指向右滑动时的最小距离  
  28.     private static final int XDISTANCE_MIN = 150;  
  29.       
  30.     //记录手指按下时的横坐标。  
  31.     private float xDown;  
  32.       
  33.     //记录手指移动时的横坐标。  
  34.     private float xMove;  
  35.       
  36.     //用于计算手指滑动的速度。  
  37.     private VelocityTracker mVelocityTracker;  
  38.       
  39.     @Override  
  40.     protected void onCreate(Bundle savedInstanceState) {  
  41.         super.onCreate(savedInstanceState);  
  42.         setContentView(R.layout.activity_second);  
  43.           
  44.         Button btn = (Button) findViewById(R.id.btn_second);  
  45.         btn.setOnClickListener(new OnClickListener() {  
  46.             @Override  
  47.             public void onClick(View v) {  
  48.                 startActivity(new Intent(SecondActivity.this, ThirdActivity.class));  
  49.                 //设置切换动画,从右边进入,左边退出  
  50.                 overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left);  
  51.             }  
  52.         });  
  53.           
  54.         LinearLayout ll = (LinearLayout) findViewById(R.id.ll_second);  
  55.         ll.setOnTouchListener(this);  
  56.     }  
  57. // 转载请说明出处:http://blog.csdn.net/ff20081528/article/details/17845753  
  58.     @Override  
  59.     public boolean onTouch(View v, MotionEvent event) {  
  60.         createVelocityTracker(event);  
  61.         switch (event.getAction()) {  
  62.         case MotionEvent.ACTION_DOWN:  
  63.             xDown = event.getRawX();  
  64.             break;  
  65.         case MotionEvent.ACTION_MOVE:  
  66.             xMove = event.getRawX();  
  67.             //活动的距离  
  68.             int distanceX = (int) (xMove - xDown);  
  69.             //获取顺时速度  
  70.             int xSpeed = getScrollVelocity();  
  71.             //当滑动的距离大于我们设定的最小距离且滑动的瞬间速度大于我们设定的速度时,返回到上一个activity  
  72.             if(distanceX > XDISTANCE_MIN && xSpeed > XSPEED_MIN) {  
  73.                 finish();  
  74.             }  
  75.             break;  
  76.         case MotionEvent.ACTION_UP:  
  77.             recycleVelocityTracker();  
  78.             break;  
  79.         default:  
  80.             break;  
  81.         }  
  82.         return true;  
  83.     }  
  84.       
  85.     /** 
  86.      * 创建VelocityTracker对象,并将触摸content界面的滑动事件加入到VelocityTracker当中。 
  87.      *  
  88.      * @param event 
  89.      *         
  90.      */  
  91.     private void createVelocityTracker(MotionEvent event) {  
  92.         if (mVelocityTracker == null) {  
  93.             mVelocityTracker = VelocityTracker.obtain();  
  94.         }  
  95.         mVelocityTracker.addMovement(event);  
  96.     }  
  97.       
  98.     /** 
  99.      * 回收VelocityTracker对象。 
  100.      */  
  101.     private void recycleVelocityTracker() {  
  102.         mVelocityTracker.recycle();  
  103.         mVelocityTracker = null;  
  104.     }  
  105.       
  106.     /** 
  107.      * 获取手指在content界面滑动的速度。 
  108.      *  
  109.      * @return 滑动速度,以每秒钟移动了多少像素值为单位。 
  110.      */  
  111.     private int getScrollVelocity() {  
  112.         mVelocityTracker.computeCurrentVelocity(1000);  
  113.         int velocity = (int) mVelocityTracker.getXVelocity();  
  114.         return Math.abs(velocity);  
  115.     }  
  116. }  



 注释我写的很清楚了,大家可以直接下载demo来看很简单,这个demo中的滑动返回的实现和Activity的耦合性很高,今天主要就说下实现思路好过程,过几天会把这个抽象出来成为一个组件使用。

 

demo:http://download.csdn.net/detail/ff20081528/6815661

 

 转载请说明出处:http://blog.csdn.net/ff20081528/article/details/17845753

 

如果觉得文章对你有那么一点小帮助,请挥动下你的小手,点击下面的“”字或者给个评论。大笑

 

 

Android模仿iOS实现侧滑返回(类似微信)

我们都知道侧滑返回操作是 iOS 里面比较常见的功能,一般是手指在靠近手机屏幕左边缘向右滑动就可以关闭当前的界面,iOS 系统提供了这样的 API,但是 Android 怎么实现呢?...
  • ifmvo
  • ifmvo
  • 2016年10月19日 22:00
  • 1418

Android滑动返回-swipebacklayout解析

交互效果背景ios7发布时有滑动返回手势操作,产品经理看到后很兴奋,立即要求android增加相同手势操作。由于android系统特性,并不支持两个activity的滑动操作。经过一番研究和挣扎,终于...
  • yirentianran
  • yirentianran
  • 2015年09月24日 11:35
  • 12865

android实现向右滑动返回功能

在ios7中,苹果的原生态应用几乎都能够通过向右滑动来返回到前一个页面,这样可以避免用户在单手操作时用大拇指去点击那个遥远的返回键(iphone5的这种返回被吐糟为反人类设计)。然而现在android...
  • ff20081528
  • ff20081528
  • 2014年01月04日 17:42
  • 34437

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

发现目前很多app应用,都具有左滑返回的功能,而且感觉体验很是愉快,尤其酷狗音乐左滑返回的实现,更是炫酷。今天就学习了,具体实现。先看一下效果图吧:准备: 有两种方案:1:添加库文件(推荐用这种...
  • da_caoyuan
  • da_caoyuan
  • 2016年12月30日 12:00
  • 2766

android侧滑返回总结

  • 2016年08月03日 11:21
  • 7.31MB
  • 下载

实现Activity侧滑返回效果

实现Activity侧滑返回效果,通过ViewDragHelper来检测到屏幕侧滑,然后通过内置接口传递给Acitivity触发了侧滑事件,通知其关闭。实现Activity侧滑返回效果...
  • zhiwenyan
  • zhiwenyan
  • 2016年10月27日 16:04
  • 1250

android 滑动返回

  • 2014年03月17日 15:00
  • 1.38MB
  • 下载

android实现向右滑动返回功能

[置顶] android实现向右滑动返回功能 分类: android2014-01-04 17:42 12415人阅读 评论(19) 收藏 举报 android向右滑动返回跳转 ...
  • h183288132
  • h183288132
  • 2015年07月10日 22:46
  • 724

android手势滑动返回上一页

  • 2015年08月26日 14:35
  • 3.3MB
  • 下载

iOS之手势滑动返回功能

iOS中如果不自定义UINavigationBar,通过手势向右滑是可以实现返回的,这时左边的标题文字提示的是上一个ViewController的标题,如果需要把文字改为简约风格,例如弄过箭头返回啥的...
  • LVXIANGAN
  • LVXIANGAN
  • 2016年04月02日 10:34
  • 3219
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android实现向右滑动返回功能
举报原因:
原因补充:

(最多只允许输入30个字)