Exemples de GestureDetector Android en Kotlin
Quand nous parlons de glisser, ce qui vient à l'esprit est le ViewPager qui est typiquement utilisé pour glisser des fragments ou même parfois des vues. Mais pas pour les activités. Si vous voulez faire glisser une activité en tant que composant, vous devez utiliser la classe GestureDetector.
Dans ce tutoriel, vous allez apprendre :
- Comment faire glisser des
activitésen utilisant l'APIGestureDetector.
Pourquoi ce tutoriel ?
- Exemples écrits en Kotlin.
- Pratique et rapide.
- Pas à pas.
- Écrit et validé pour fonctionner dans android studio.
(a). Exemple 1 - Comment faire glisser une activité pour en ouvrir une autre
Cet exemple explore comment vous pouvez faire glisser une activité pour ouvrir une autre activité. En gros, vous tirez sur une activité et cela a pour effet d'ouvrir une autre activité.
Étape 1 : Dépendances
Aucune dépendance de tierce partie n'est nécessaire pour ce projet.
Step 2 : Code
Nous écrivons notre code en Kotlin. Nous aurons trois classes :
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
}
}
SecondActivity.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 (Activité principale)
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)
}
}
Step 3 : Layouts
Trouvez les layouts dans la référence du code source.
Étape 4 : Exécuter
Exécutez le projet et vous obtiendrez ce qui suit :

Étape 5 : Télécharger
Téléchargez le code depuis [ici] (https://github.com/Oclemy/MrSwipeActivity/archive/refs/heads/master.zip).