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实现向右滑动返回功能

[置顶] android实现向右滑动返回功能 分类: android2014-01-04 17:42 12415人阅读 评论(19) 收藏 举报 android向右滑动返回跳转 ...

android实现向右滑动返回功能

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

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Android Activity向右滑动返回

 向右滑动返回,对于屏幕过大的手机来说,在单手操作时,是一个不错的用户体验,用户不必再费力的或者用另一个手去点击屏幕左上角的返回按钮或者,手机右下角的返回按钮,轻轻向右滑动屏幕即可返回上一页...

[oc实战练习四]右滑返回

iOS右滑返回

【Android】Activity右滑返回的实现

Activity右滑返回的实现 滑动返回的效果 如何使得Activity滑动 要滑动的是什么 具体怎么滑动 如何获得手指的位置 抬起手指后的行为 一个简单的滑动返回效果 布局文件 layout_fir...
  • H28496
  • H28496
  • 2015-10-19 12:51
  • 2863

Android学习笔记(六)--右滑返回SwipeBack

今天我们要实现的功能是右滑返回功能。想法来源是CSDN的客户端,于是打算自己做一个低配版的右滑返回功能,感觉每天进步的源泉就是日常使用的这些app,如果看到的所有功能都能轻松实现的话,那水平也一定不低...

iOS 实现全屏右滑返回功能解析!

由于大屏手机的广泛运用,单手操作变得越加困难,尤其是对于手小的朋友,让我如何单手玩手。而苹果手机不像安卓手机能够有返回的物理键,对于app要全屏右滑或保持原生边缘触发,各有说辞,这里不讨论其好坏. ...

Android中SwipeBack右滑返回(手势返回)的实现

Android中SwipeBack右滑返回(手势返回)的实现现在有很多App支持右滑返回,比如知乎,效果比较赞。于是自己对Activity和Fragment进行了继承,派生出SwipeBackActi...

Xcode6.0后IOS7.0之后的手势滑动

由于视力的问题一直以来都是比较喜欢大字体的,无论是编译器还是网页还是手机,所有的东西都是大字体,所以博客也是大字体;好,开讲: Xcode6+ 实现ios7.0+ 的手势返回(屏幕左侧向右滑动) 1...

Activity右滑返回效果实现

Activity右滑返回效果实现Activity右滑返回效果实现 实现思路 实现过程 1 SwipeBackLayout的关键代码 2 Activity 背景透明处理 问题总结 1 遇到的疑难问题 2...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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