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és
en 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).