国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

IOS開發向右滑動返回前一個頁面功能(demo)

2019-10-21 18:53:49
字體:
來源:轉載
供稿:網友

在ios7中,蘋果的原生態應用幾乎都能夠通過向右滑動來返回到前一個頁面,這樣可以避免用戶在單手操作時用大拇指去點擊那個遙遠的返回鍵(iphone5的這種返回被吐糟為反人類設計)。然而現在android的手機市場上幾乎很難找到小于4寸屏的手機了,幾乎所有的應用都是通過點擊左上角的返回來退到上一個頁面,如果單手拿一個大屏手機,我是覺得會發瘋。為此花了點時間寫了個向右滑動返回的demo。

效果如下圖:

ios向右滑動返回,android向右滑動返回

此圖為點擊第一個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中,代碼如下:

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; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); Button btn = (Button) findViewById(R.id.btn_second); btn.setOnClickListener(new OnClickListener() { @Override public 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 @Override public 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(); //當滑動的距離大于我們設定的最小距離且滑動的瞬間速度大于我們設定的速度時,返回到上一個activity if(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的耦合性很高,今天主要就說下實現思路好過程,過幾天會把這個抽象出來成為一個組件使用。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 松桃| 永兴县| 庆阳市| 平山县| 永济市| 岑溪市| 临潭县| 边坝县| 永康市| 七台河市| 千阳县| 从江县| 蒲江县| 鹰潭市| 密山市| 甘德县| 岳阳市| 兰西县| 沁水县| 阳江市| 泰宁县| 新蔡县| 祁阳县| 赤城县| 涞源县| 象山县| 石城县| 屏山县| 阿城市| 衡南县| 峨山| 定边县| 乐安县| 饶河县| 宣威市| 新竹市| 保亭| 滨海县| 东乌| 中江县| 聊城市|