Objeto em movimento simples com TouchEvents no Android
Neste artigo, faremos um aplicativo através do qual um usuário pode mover um objeto visível na tela de acordo com os movimentos de seus dedos na tela. Tocar para arrastar / mover objetos (como imagem, botão) é muito popular em jogos como quebra-cabeças. Aqui, criaremos uma maneira simples de tocar e arrastar uma imagem na tela do dispositivo depois que o usuário concluir esta ação, a imagem terá um novo local na tela do dispositivo usando view onTouchListener . Um exemplo de GIF é fornecido abaixo para se ter uma ideia sobre o que faremos neste artigo. Observe que vamos implementar este projeto usando a linguagem Kotlin .
Implementação passo a passo
Etapa 1: Criar um novo projeto
Para criar um novo projeto no Android Studio, consulte Como criar / iniciar um novo projeto no Android Studio . Observe que selecione Kotlin como a linguagem de programação.
Etapa 2: definir qualquer objeto de imagem no layout
Navegue até app> res> layout> activity_main.xml e adicione o código abaixo a esse arquivo. Abaixo está o código para o arquivo activity_main.xml .
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/image"
android:layout_width="100dp"
android:layout_height="100dp"
android:contentDescription="moving object"
android:src="@drawable/gfg" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
Etapa 3: Trabalhar com o arquivo MainActivity.kt
Acesse o arquivo MainActivity.kt e consulte o código a seguir. Abaixo está o código para o arquivo MainActivity.kt . Os comentários são adicionados dentro do código para entender o código em mais detalhes.
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.MotionEvent
import android.view.View.OnTouchListener
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.RelativeLayout
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
private lateinit var mainLayout: ViewGroup
private lateinit var image: ImageView
// default position of image
private var xDelta = 0
private var yDelta = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mainLayout = findViewById(R.id.main)
image = findViewById(R.id.image)
// returns True if the listener has
// consumed the event, otherwise False.
image.setOnTouchListener(onTouchListener())
}
@SuppressLint("ClickableViewAccessibility")
private fun onTouchListener(): OnTouchListener {
return OnTouchListener { view, event ->
// position information
// about the event by the user
val x = event.rawX.toInt()
val y = event.rawY.toInt()
// detecting user actions on moving
when (event.action and MotionEvent.ACTION_MASK) {
MotionEvent.ACTION_DOWN -> {
val lParams = view.layoutParams as RelativeLayout.LayoutParams
xDelta = x - lParams.leftMargin
yDelta = y - lParams.topMargin
}
MotionEvent.ACTION_UP -> Toast.makeText(this,
"new location!", Toast.LENGTH_SHORT)
.show()
MotionEvent.ACTION_MOVE -> {
// based on x and y coordinates (when moving image)
// and image is placed with it.
val layoutParams = view.layoutParams as RelativeLayout.LayoutParams
layoutParams.leftMargin = x - xDelta
layoutParams.topMargin = y - yDelta
layoutParams.rightMargin = 0
layoutParams.bottomMargin = 0
view.layoutParams = layoutParams
}
}
// reflect the changes on screen
mainLayout.invalidate()
true
}
}
}
Agora, execute o aplicativo.
Saída:
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva