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 :

  1. Comment faire glisser des activités en utilisant l'API GestureDetector.

Pourquoi ce tutoriel ?

  1. Exemples écrits en Kotlin.
  2. Pratique et rapide.
  3. Pas à pas.
  4. É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 :

Kotlin Android <code>GestureDetector</code> Example

Étape 5 : Télécharger

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

Catégorisé: