Quando falamos em deslizar, o que vem à mente é o "ViewPager" que é normalmente utilizado para deslizar "fragmentos" ou mesmo, às vezes, vistas. No entanto, não é "atividade". Se você quiser deslizar uma atividade
como um componente, você tem que utilizar a classe GestureDetector
.
Neste tutorial, você aprenderá:
- Como deslizar
atividades
utilizando o APIGestureDetector
.
Por que este tutorial?
- Exemplos escritos em Kotlin.
- Prático e rápido.
- Passo a passo.
- Escrito e validado para trabalhar em estúdio andróide.
(a). Exemplo 1 - Como Passar uma Atividade para abrir outra
Este exemplo explora como você pode passar uma "atividade" para abrir outra "atividade". Basicamente, você puxa para baixo uma "atividade" e isto resulta na abertura de outra "atividade".
Passo 1: Dependências
Nenhuma dependência de terceiros é necessária para este projeto.
Passo 2: Código
Nós escrevemos nosso código em Kotlin. Teremos três 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***
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)
}
}
Passo 3: Layouts
Encontre layouts na referência do código fonte.
Passo 4: Executar
Execute o projeto e você terá o seguinte:
Passo 5: Download
Baixe o código a partir de aqui.