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 HttP请求服务器,连接超时

@Override public void onClick(View v) { switch (v.getId()) { case R.id.imagebtn: new Thread() { ...

android 遮罩制作 圆形( 多边形)头像

看到QQ上的圆形头头像,是否有种模仿的冲动呢:  下面给出一个声称多边形Bitmap的方法:  private Bitmap createStarPhoto(int x, int y, Bitmap ...

android实现向右滑动返回功能

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

Android实现IOS向右滑动退出当前Activity

首先,我们所需要的效果是当手指向右滑动的时候,当前的activity跟随手指移动,上一个activity也要跟随移动,只是速度稍慢,我们知道,activity有一个getWindow.getDecor...
  • ybw486
  • ybw486
  • 2016年04月24日 21:08
  • 329

ios开发 向右滑动手势实现返回 -- @ShinePug

在navigationController中实现向右滑动 返回功能 系统提供的backbarbuttonitem,不用添加任何代码即可实现向右滑动后退功能,但是往往要对按钮修改样式等时,就需要自定义...

ios开发 向右滑动手势实现返回.在NavigationController中如何设置

在navigationController中实现向右滑动 返回功能 系统提供的backbarbuttonitem,不用添加任何代码即可实现向右滑动后退功能,但是往往要对按钮修改样式等时,就需要自定义...

ios开发 向右滑动手势实现返回.在NavigationController中如何设置

在navigationController中实现向右滑动 返回

类似直播App的向右滑动清屏功能

声明:这博文涉及的代码块及lib是来自JieGuo这位大神的,本人只是做了很小的修改方便大家理解。感谢感谢!!! 下面是最终的效果图: 布局文件: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android实现向右滑动返回功能
举报原因:
原因补充:

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