android實現向右滑動返回功能

來源:互聯網
上載者:User

在ios7中,蘋果的原生態應用幾乎都能夠通過向右滑動來返回到前一個頁面,這樣可以避免使用者在單手操作時用大拇指去點擊那個遙遠的返回鍵(iphone5的這種返回被吐糟為反人類設計)。然而現在android的手機市場上幾乎很難找到小於4寸屏的手機了,幾乎所有的應用都是通過點擊左上方的返回來退到上一個頁面,如果單手拿一個大屏手機,我是覺得會發瘋。為此花了點時間寫了個向右滑動返回的demo。
一、設計思路
1,讓一個activity中的根布局實現onTouchListener介面,當手指在螢幕上向右滑動時,我們記下ACTION_DOWN的X軸的位置,在手指滑動時(即ACTION_MOVE),擷取滑動時的X軸的位置,當滑動的位置大於某個臨界值且在這個方向上的速度大於某個臨界值時,我們就認為使用者滑動手指的意圖是返回上一個頁面。
2,按照這種思路下來,我們做出來的向右滑動可以實現這個功能,但是會感覺很生硬,沒有任何的過度就返回到上一個頁面了,為此,在這裡為activity加上了啟動和結束的過度動畫。這就是實現的思路,非常簡單,下面看代碼吧。
二、主要的代碼

這個demo中,我寫了三個activity,activity1可以跳轉到activity2,activity2可以跳轉到activity3,activity3可以滑動返回到activity2,activity2可以滑動返回到activity1。主要的邏輯代碼都放在了Activity2中,代碼如下:

package org.sunday.slidingreturn;import com.example.slidingreturn.R;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.MotionEvent;import android.view.VelocityTracker;import android.view.View;import android.view.View.OnClickListener;import android.view.View.OnTouchListener;import android.widget.Button;import android.widget.LinearLayout;/** *  * @author sunday *  2014-1-4 *  zhengchao1937@163.com */public class SecondActivity extends Activity implements OnTouchListener {//手指向右滑動時的最小速度private static final int XSPEED_MIN = 200;//手指向右滑動時的最小距離private static final int XDISTANCE_MIN = 150;//記錄手指按下時的橫座標。private float xDown;//記錄手指移動時的橫座標。private float xMove;//用於計算手指滑動的速度。private VelocityTracker mVelocityTracker;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);Button btn = (Button) findViewById(R.id.btn_second);btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {startActivity(new Intent(SecondActivity.this, ThirdActivity.class));//設定切換動畫,從右邊進入,左邊退出overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left);}});LinearLayout ll = (LinearLayout) findViewById(R.id.ll_second);ll.setOnTouchListener(this);}// 轉載請說明出處:http://blog.csdn.net/ff20081528/article/details/17845753@Overridepublic boolean onTouch(View v, MotionEvent event) {createVelocityTracker(event);switch (event.getAction()) {case MotionEvent.ACTION_DOWN:xDown = event.getRawX();break;case MotionEvent.ACTION_MOVE:xMove = event.getRawX();//活動的距離int distanceX = (int) (xMove - xDown);//擷取順時速度int xSpeed = getScrollVelocity();//當滑動的距離大於我們設定的最小距離且滑動的瞬間速度大於我們設定的速度時,返回到上一個activityif(distanceX > XDISTANCE_MIN && xSpeed > XSPEED_MIN) {finish();}break;case MotionEvent.ACTION_UP:recycleVelocityTracker();break;default:break;}return true;}/** * 建立VelocityTracker對象,並將觸摸content介面的滑動事件加入到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;}/** * 擷取手指在content介面滑動的速度。 *  * @return 滑動速度,以每秒鐘移動了多少像素值為單位。 */private int getScrollVelocity() {mVelocityTracker.computeCurrentVelocity(1000);int velocity = (int) mVelocityTracker.getXVelocity();return Math.abs(velocity);}}



 注釋我寫的很清楚了,大家可以直接下載demo來看很簡單,這個demo中的滑動返回的實現和Activity的耦合性很高,今天主要就說下實現思路好過程,過幾天會把這個抽象出來成為一個組件使用。

 

demo:點擊開啟連結

 

 轉載請說明出處:http://blog.csdn.net/ff20081528/article/details/17845753

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.