我正在开发一个AndroidTV应用,使用Leanback库。
我已经成功地使几个HorizontalGridView(它是RecyclerView的扩展)工作了。但是,按住右|左按钮并滚动它们会使它们滚动得非常快,太快了!
如何减慢按住按钮滚动时的速度?
我已经成功地使几个HorizontalGridView(它是RecyclerView的扩展)工作了。但是,按住右|左按钮并滚动它们会使它们滚动得非常快,太快了!
如何减慢按住按钮滚动时的速度?
不要在你的活动中监听关键事件的一些毫秒时间。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
long current = System.currentTimeMillis();
boolean res = false;
if (current - mLastKeyDownTime < 300) {
res = true;
} else {
res = super.onKeyDown(keyCode, event);
mLastKeyDownTime = current;
}
return res;
}
object : ListRowPresenter() {
protected override fun initializeRowViewHolder(holder: com.mxtech.mx_leanback.widget.RowPresenter.ViewHolder) {
holder.gridView.setOnKeyInterceptListener(object : OnKeyInterceptListener{
override fun onInterceptKeyEvent(event: KeyEvent?): Boolean {
val keyCode = event!!.keyCode
val actionType = event.action
if (actionType == KeyEvent.ACTION_DOWN) {
if (holder.gridView.scrollState != RecyclerView.SCROLL_STATE_IDLE ) {
if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT || keyCode == KeyEvent.KEYCODE_DPAD_RIGHT || keyCode == KeyEvent.KEYCODE_DPAD_UP || keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
return true
}
}
}
return false
}
})
override fun isUsingDefaultListSelectEffect(): Boolean {
return super.isUsingDefaultListSelectEffect()
}
}
Kotlin 中更简短的答案。
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
val current = System.currentTimeMillis()
if (current - lastKeyDownTime > 100){
lastKeyDownTime = current
return super.onKeyDown(keyCode, event)
}
return true
}