Kotlin Android GestureDetector の例
スワイプというと、思い浮かぶのは ViewPager で、これは一般的に fragments や、時にはビューをスワイプするのに使われます。しかし、activityは違います。コンポーネントとして activity をスワイプするには、GestureDetector クラスを使用する必要があります。
このチュートリアルでは、以下のことを学びます。
- GestureDetector
APIを使ってactivity`をスワイプする方法。
なぜこのチュートリアルを使うのでしょうか。
- Kotlinで書かれた例です。
- 実用的で早い。
- ステップ・バイ・ステップ
- アンドロイドスタジオで動作するように書かれ、検証されています。
(a). 例1 - あるアクティビティをスワイプして別のアクティビティを開く方法
この例では、ある activity をスワイプして別の activity を開く方法を探ります。基本的には、ある activity をプルダウンすると、別の activity を開くことになります。
ステップ1: 依存関係
このプロジェクトでは、サードパーティの依存関係は必要ありません。
Step 2: コード
コードは Kotlin で書きます。3つのクラスを用意します。
SwipeToActivity.kt <!
package info.camposha.mr_swipeactivity
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.view.GestureDetector.SimpleOnGestureListener
import android.view.MotionEvent
class SwipeToActivity(//the activity where you will change activity from
var context: Context,
var firstClass: Class<*>?,
var left: Boolean,
var right: Boolean, //these enable sliding to left, right or both directions
var both: Boolean, //first class is the class you come to when sliding to right, second class when you slide left
var secondClass: Class<*>?
) : SimpleOnGestureListener() {
override fun onFling(
event1: MotionEvent,
event2: MotionEvent,
velocityX: Float,
velocityY: Float
): Boolean {
if (event2.x > event1.x) {
if (right || both && firstClass != null) {
//TODO WHEN SWIPING TO RIGHT
val intent = Intent(context, firstClass)
(context as Activity).finish()
context.startActivity(intent)
}
} else if (event2.x < event1.x) {
if (left || both && secondClass != null) {
//TODO WHEN SWIPING TO LEFT
val intent = Intent(context, secondClass)
(context as Activity).finish()
context.startActivity(intent)
}
}
return true
}
}
セカンドアクティヴィティ.kt <!
package info.camposha.mr_swipeactivity
import android.os.Bundle
import android.view.MotionEvent
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.GestureDetectorCompat
class SecondActivity : AppCompatActivity() {
private var gestureObject: GestureDetectorCompat? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
gestureObject = GestureDetectorCompat(
this,
SwipeToActivity(this@SecondActivity, null, true, false, false, MainActivity::class.java)
)
}
override fun onTouchEvent(event: MotionEvent): Boolean {
gestureObject!!.onTouchEvent(event)
return super.onTouchEvent(event)
}
}
MainActivity.kt <!
package info.camposha.mr_swipeactivity
import android.os.Bundle
import android.view.MotionEvent
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.GestureDetectorCompat
import info.camposha.mr_swipeactivity.MainActivity
class MainActivity : AppCompatActivity() {
private var gestureObject: GestureDetectorCompat? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
gestureObject = GestureDetectorCompat(
this,
SwipeToActivity(this@MainActivity, SecondActivity::class.java, false, true, false, null)
)
}
override fun onTouchEvent(event: MotionEvent): Boolean {
gestureObject!!.onTouchEvent(event)
return super.onTouchEvent(event)
}
}
ステップ3:レイアウト
ソースコードを参照してレイアウトを確認します。
Step 4: 実行
プロジェクトを実行すると、以下のように表示されます。

Step 5: ダウンロード
コードをこちらからダウンロードします。