STEP9. SwipeActivityの修正

当Stepの目次

概要

端末をスワイプしたときに次の画面へ遷移できるようにする

実行結果

実行すると、以下のような画面が表示されます。

左の画面が表示されているとき、画面にタッチし、指を上に滑らせると、右の画面が表示されるようになります。

この時点ではおみくじの結果は表示できません。

STEP9-1. ソースコードを修正する

このSTEPでは、スワイプ画面に対応するアクティビティ(SwipeActivity)を修正します。

下記のコードをコピーして SwipeActivity を作成します。

SwipeActivity.java
                
package com.school.it.kanda.kandaomikuji; import android.content.Intent; import android.content.pm.ActivityInfo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.GestureDetector; import android.view.MotionEvent; public class SwipeActivity extends AppCompatActivity { private static final int SWIPE_MIN_DISTANCE_Y = 120; //縦の移動距離の最低値 private static final int SWIPE_MAX_OFF_PATH_X = 250; //横の移動距離の最高値 private static final int SWIPE_THRESHOLD_VELOCITY_Y = 200; //縦の移動速度の最低値 private GestureDetector mGestureDetector; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_swipe); //画面を縦に固定 this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); mGestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() { /* * 画面をスワイプしたときに呼び出される処理 * @param beforeEvent : 移動前の座標 * @param afterEvent ; 移動後の座標 * @param velocityX : 横(X軸)の移動速度 * @param velocityY : 横(Y軸)の移動速度 * @return false */ @Override public boolean onFling(MotionEvent beforeEvent, MotionEvent afterEvent, float velocityX, float velocityY) { // 横(X軸)の移動距離が大きすぎる場合は無視 if (Math.abs(beforeEvent.getX() - afterEvent.getX()) > SWIPE_MAX_OFF_PATH_X) { return false; } /* * 開始位置から終了位置の縦の移動距離が指定値より大きい または 縦の移動速度が指定値より大きいときは * ResultActivityへ遷移 */ if (beforeEvent.getY() - afterEvent.getY() > SWIPE_MIN_DISTANCE_Y && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY_Y) { Intent intent = new Intent(getApplicationContext(), ResultActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(intent); SwipeActivity.this.finish(); } return false; } }); } @Override protected void onDestroy(){ super.onDestroy(); //メモリの開放 mGestureDetector = null; } /* * 画面をタッチした時に呼び出される処理 */ @Override public boolean onTouchEvent(MotionEvent event) { return mGestureDetector.onTouchEvent(event); } }

この処理では、画面をタッチし、画面をタッチしたまま一定距離以上縦に指を動かすと、次のResultActivityへ遷移するような処理を記述しています。

画面にタッチすると、タッチした指が画面のどの位置に置かれたかを検出し、指を画面から離すまで、タッチしている指の位置情報を随時検出していきます。

画面をタッチしたまま指を動かすと、最初にタッチされた指の位置情報からどの距離分動いたかを算出し、一定以上距離が開くと次の画面へ遷移できるようになっています。

以上のソースコードを貼り付け、アプリケーションを実行してください。

左側の画面が表示されているときに、端末をタッチしたまま上に指を動かしたとき、右側の画面が表示できたら完了です。