尝试检测滑动手势并使用来自Android文档的代码并更改liitle。 我尝试用Y轴数据显示吐司。我在MyGestureListener类的开头声明了变量,并在调用onFling方法时尝试更改它。我想用Y轴数据显示toast,但总是看到默认字符串“Def_Nothing”。如果我添加Log.d - 我看,onFling方法工作,我得到正确的X轴和Y轴数据。 我认为不了解面向对象编程的一些基本原理,并且对它的解释很少。
class MainActivity : AppCompatActivity() {
private lateinit var mDetector: GestureDetectorCompat
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mDetector = GestureDetectorCompat(this, MyGestureListener())
}
override fun onTouchEvent(event: MotionEvent?): Boolean {
this.mDetector.onTouchEvent(event)
val myGestureListener = MyGestureListener()
Toast.makeText(this, myGestureListener.currentGesture, Toast.LENGTH_LONG).show()
return super.onTouchEvent(event)
}
class MyGestureListener: GestureDetector.SimpleOnGestureListener() {
var currentGesture: String = "Def_Nothing"
override fun onFling(e1: MotionEvent?, e2: MotionEvent?, velocityX: Float, velocityY: Float): Boolean {
currentGesture = (e2!!.y - e1!!.y).toString()
return true
}
}
}
答案 0 :(得分:2)
你必须保持对你的手势监听器的引用,你不能每次都创建一个新的。请参阅下面的示例代码。
class MainActivity : AppCompatActivity() {
private lateinit var mDetector: GestureDetectorCompat
private lateinit var mGestureListener: MyGestureListener
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mGestureListener = MyGestureListener()
mDetector = GestureDetectorCompat(this, mGestureListener)
}
override fun onTouchEvent(event: MotionEvent?): Boolean {
this.mDetector.onTouchEvent(event)
Toast.makeText(this, mGestureListener.currentGesture, Toast.LENGTH_LONG).show()
return super.onTouchEvent(event)
}
class MyGestureListener: GestureDetector.SimpleOnGestureListener() {
...
}
}