Когда мы говорим о пролистывании, на ум приходит ViewPager, который обычно используется для пролистывания фрагментов или даже иногда представлений. Однако это не относится к активности. Если вы хотите пролистывать активность как компонент, вам необходимо использовать класс GestureDetector.

В этом руководстве вы узнаете:

  1. Как пролистывать активности с помощью API GestureDetector.

Зачем нужен этот учебник?

  1. Примеры, написанные на языке Kotlin.
  2. Практично и быстро.
  3. Шаг за шагом.
  4. Написан и проверен для работы в android studio.

(a). Пример 1 – Как смахнуть одну активность, чтобы открыть другую

В этом примере рассматривается, как можно провести пальцем по активности, чтобы открыть другую активность. По сути, вы тянете вниз на активности, и это приводит к открытию другой активности.

Doc Translator: Как пользоваться переводчиком документов?

Doc Translator: Как пользо...
Doc Translator: Как пользоваться переводчиком документов?

Шаг 1: Зависимости

Для этого проекта не требуется никаких сторонних зависимостей.

Шаг 2: Код

Мы пишем наш код на языке Kotlin. У нас будет три класса:

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([email protected], 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([email protected], SecondActivity::class.java, false, true, false, null)
        )
    }

    override fun onTouchEvent(event: MotionEvent): Boolean {
        gestureObject!!.onTouchEvent(event)
        return super.onTouchEvent(event)
    }
}

Шаг 3: Макеты

Найдите макеты в ссылке на исходный код.

Шаг 4: Запуск

Запустите проект, и вы получите следующее:

Kotlin Android <code>GestureDetector</code> Example

Шаг 5: Загрузить

Скачайте код с здесь.