lam*_*bda 11 android ontouchlistener kotlin
如何覆盖Kotlin中的performClick以避免警告.
next.setOnTouchListener(View.OnTouchListener { view, motionEvent ->
when (motionEvent.action){
MotionEvent.ACTION_DOWN -> {
val icon: Drawable = ContextCompat.getDrawable(activity.applicationContext, R.drawable.layer_bt_next)
icon.setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY)
next.setImageDrawable(icon)
}
MotionEvent.ACTION_UP -> {
//view.performClick()
next.setImageResource(R.drawable.layer_bt_next)
}
}
return@OnTouchListener true
})
Run Code Online (Sandbox Code Playgroud)
view.performClick不起作用.
Man*_*ddy 18
试试这种方式:
next.setOnTouchListener(object : View.OnTouchListener {
override fun onTouch(v: View?, event: MotionEvent?): Boolean {
when (event?.action) {
MotionEvent.ACTION_DOWN -> //Do Something
}
return v?.onTouchEvent(event) ?: true
}
})
Run Code Online (Sandbox Code Playgroud)
好的,我通过覆盖 OnTouch 侦听器解决了我自己的问题。
override fun onTouch(view: View, motionEvent: MotionEvent): Boolean {
when (view) {
next -> {
Log.d("next", "yeyy")
when (motionEvent.action){
MotionEvent.ACTION_DOWN -> {
val icon: Drawable = ContextCompat.getDrawable(activity.applicationContext, R.drawable.layer_bt_next)
icon.setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY)
next.setImageDrawable(icon)
}
MotionEvent.ACTION_UP -> {
view.performClick()
next.setImageResource(R.drawable.layer_bt_next)
}
}
}
previous -> {
//ingredients here XD
}
}
return true
}
Run Code Online (Sandbox Code Playgroud)
这样,我可以调用单个 onTouch 并将其实现到多个按钮,也可以通过以下方式使用 onClick:
view.performClick()
Run Code Online (Sandbox Code Playgroud)
不要忘记实施:
View.OnTouchListener
Run Code Online (Sandbox Code Playgroud)
并设置监听器:
next.setOnTouchListener(this)
previous.setOnTouchListener(this)
Run Code Online (Sandbox Code Playgroud)
我认为您的解决方案实际上不会解决警告提出的问题。警告指出某些辅助功能用于performClick()激活按钮。如果您查看View类,函数会直接performClick()调用onClickListener,这意味着onTouchListener不会next.setImageResource(R.drawable.layer_bt_next)为这些可访问性函数执行 ( ) 中的代码,因为视图永远不会被物理接触,因此您的onTouch代码将不会运行。您必须执行以下任一操作:
onTouchListener,并覆盖performClick以执行代码,或onClickListener在执行代码的视图上设置。您可以onClickListener在您的 onTouchListener 类中实现并onClick()从您的onTouchListener(您view.performClick()现在拥有的位置)手动调用,然后将您的可执行代码移动到onClick覆盖。您还必须在您的观点上设置 BOTHonTouchListener和onClickListener。
| 归档时间: |
|
| 查看次数: |
29352 次 |
| 最近记录: |