Android Can';t在事件中更改变量
尝试检测刷卡手势,并使用android文档中的代码进行liitle更改。 我尝试用Y轴数据显示toast。我在MyGestureListener类的开头声明了变量,并在调用onFling方法时尝试更改它。我想用Y轴数据显示toast,但总是看到默认字符串“Def_Nothing”。如果我添加Log.d-I watch,这个onFling方法就可以工作了,我可以得到正确的X轴和Y轴数据。 我认为我不了解面向对象编程的一些基本原理,也不需要对其进行任何解释Android Can';t在事件中更改变量,android,oop,kotlin,gesturedetector,Android,Oop,Kotlin,Gesturedetector,尝试检测刷卡手势,并使用android文档中的代码进行liitle更改。 我尝试用Y轴数据显示toast。我在MyGestureListener类的开头声明了变量,并在调用onFling方法时尝试更改它。我想用Y轴数据显示toast,但总是看到默认字符串“Def_Nothing”。如果我添加Log.d-I watch,这个onFling方法就可以工作了,我可以得到正确的X轴和Y轴数据。 我认为我不了解面向对象编程的一些基本原理,也不需要对其进行任何解释 class MainActivity :
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
}
}
}
你必须保留对你的手势听众的引用,你不能每次都创建一个新的。请参见下面的示例代码
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() {
...
}
}
谢谢,很好用。我不能提高回答率。PS将去学习OOP理论。很高兴能帮助你。如果对你有帮助的话,你应该这样做。