我是Kotlin的新手,我正在尝试创建一个功能,该功能可对滑动操作做出反应。但是我有麻烦。
当我删除abstract关键字时,它将引发错误:
Class 'dock' is not abstract and does not implement abstract member
当我保留abstract关键字时,该应用程序不想从错误开始:
java.lang.Class<kiwi.you.app.dock> cannot be instantiated
dock.kt
import android.os.Bundle
import android.content.Intent
import android.view.GestureDetector
import android.view.MotionEvent
import androidx.appcompat.app.AppCompatActivity
import android.widget.Toast
/* CODE */
abstract class dock : AppCompatActivity(), GestureDetector.OnGestureListener
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.dock)
hide_bars()
}
/* slot swipe */
private fun slotSwipe0A()
{
val intent = Intent(this, zeroA::class.java)
startActivity(intent)
overridePendingTransition(R.anim.slide_left_in, R.anim.slide_right_out)
}
private fun slotSwipe0B()
{
val intent = Intent(this, zeroB::class.java)
startActivity(intent)
overridePendingTransition(R.anim.slide_right_in, R.anim.slide_left_out)
}
private fun slotSwipe1()
{
val intent = Intent(this, one::class.java)
startActivity(intent)
overridePendingTransition(R.anim.slide_up_in, R.anim.slide_down_out)
}
private fun slotSwipeMinus1()
{
val intent = Intent(this, minus1::class.java)
startActivity(intent)
overridePendingTransition(R.anim.slide_down_in, R.anim.slide_up_out)
}
private val swipeThreshold = 100
private val swipeVelocityThreshold = 100
override fun onFling(downEvent: MotionEvent, moveEvent: MotionEvent, velocityX: Float, velocityY: Float): Boolean
{
var result = false
val diffY = moveEvent.y - downEvent.y
val diffX = moveEvent.x - downEvent.x
if (Math.abs(diffX) > Math.abs(diffY))
{
// right or left swipe
if (Math.abs(diffX) > swipeThreshold && Math.abs(velocityX) > swipeVelocityThreshold)
{
if (diffX > 0)
{
swipeRight()
} else
{
swipeLeft()
}
result = true
}
} else
{
// up or down swipe
if (Math.abs(diffY) > swipeThreshold && Math.abs(velocityY) > swipeVelocityThreshold)
{
if (diffY > 0)
{
swipeDown()
} else
{
swipeUp()
}
result = true
}
}
return result
}
private fun swipeUp()
{
Toast.makeText(this, "Swipe Top", Toast.LENGTH_LONG).show()
slotSwipe1()
}
private fun swipeDown()
{
Toast.makeText(this, "Swipe Bottom", Toast.LENGTH_LONG).show()
slotSwipeMinus1()
}
private fun swipeLeft()
{
Toast.makeText(this, "Swipe Left", Toast.LENGTH_LONG).show()
slotSwipe0A()
}
private fun swipeRight()
{
Toast.makeText(this, "Swipe Right", Toast.LENGTH_LONG).show()
slotSwipe0B()
}
}
我知道不能实例化抽象类,但是如何在没有错误的情况下运行它呢?这就是为什么我在这里。请帮助
答案 0 :(得分:2)
您必须实现GestureDetector.OnGestureListener
方法:
class dock : AppCompatActivity(), GestureDetector.OnGestureListener {
override fun onShowPress(e: MotionEvent?) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onSingleTapUp(e: MotionEvent?): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onDown(e: MotionEvent?): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onFling(e1: MotionEvent?, e2: MotionEvent?, velocityX: Float, velocityY: Float): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onScroll(e1: MotionEvent?, e2: MotionEvent?, distanceX: Float, distanceY: Float): Boolean {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onLongPress(e: MotionEvent?) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
(...)
提示:将光标指向“班级停靠站”上方,然后按Alt + Enter键,它将显示一个选项Implement Members