Fer*_*han 8 android kotlin android-13 gesture-detection
我已经在我的 Activity 上实现了 GestureDetector.OnGestureListener 接口。它在 Android API 32 上运行良好,但在将 Android API 级别从 32 更新到 33 后,我无法覆盖它的方法。当我回滚到 Android API 32 时,它工作正常。
这是我实现该接口的方式:
class ABCActivity: AppCompatActivity(), GestureDetector.OnGestureListener {
override fun onDown(p0: MotionEvent?): Boolean = false
override fun onShowPress(p0: MotionEvent?) = Unit
override fun onSingleTapUp(p0: MotionEvent?): Boolean = false
override fun onLongPress(p0: MotionEvent?) = Unit
override fun onFling(p0: MotionEvent?, p1: MotionEvent?, p2: Float, p3: Float): Boolean = false
override fun onScroll(
event: MotionEvent?,
event1: MotionEvent?,
distanceX: Float,
distanceY: Float
): Boolean {
// My Logic
}
}
Run Code Online (Sandbox Code Playgroud)
Rio*_*994 10
正如 Vlad 所说“删除 ? 可能会导致应用程序崩溃。因为 Motion 事件仍然可以为空”
这是 Google 的一个已知问题,已列在问题跟踪器https://issuetracker.google.com/issues/206855618上
即使 e1 定义为不可空,Android API 仍然会为其生成空值。
将compileSDK版本升级到33后,无法成功构建项目(“onFling”不覆盖任何内容)
解决此问题的一种方法是添加 @Suppress("NOTHING_TO_OVERRIDE", "ACCIDENTAL_OVERRIDE")
e1 并将其设置为可为空
override fun onFling(
e1: MotionEvent?,
... )
Run Code Online (Sandbox Code Playgroud)
如前所述,这是一个已知问题,将来应该修复。
好吧,我自己发现上面的代码在 API 级别 32 上完美工作,但在 API 级别 33 上导致问题,原因是?
操作符为MotionEvent
. 我刚刚删除了它,它在 API 级别 33 上也能正常工作。新代码如下所示。
class ABCActivity: AppCompatActivity(), GestureDetector.OnGestureListener {
override fun onDown(p0: MotionEvent): Boolean = false
override fun onShowPress(p0: MotionEvent) = Unit
override fun onSingleTapUp(p0: MotionEvent): Boolean = false
override fun onLongPress(p0: MotionEvent) = Unit
override fun onFling(p0: MotionEvent, p1: MotionEvent, p2: Float, p3: Float): Boolean = false
override fun onScroll(
event: MotionEvent,
event1: MotionEvent,
distanceX: Float,
distanceY: Float
): Boolean {
// My Logic
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2329 次 |
最近记录: |