如何在按钮按下时减慢 Android GridView 滚动速度?(LeanBack)

4
我正在开发一个AndroidTV应用,使用Leanback库。
我已经成功地使几个HorizontalGridView(它是RecyclerView的扩展)工作了。但是,按住右|左按钮并滚动它们会使它们滚动得非常快,快了!
如何减慢按住按钮滚动时的速度?

你在MainActivity中使用ScrollView吗? - Evan Ngo
3个回答

3

不要在你的活动中监听关键事件的一些毫秒时间。

 @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;
    }

0
覆盖ListRowPresenter的initializeRowViewHolder方法,并将setOnKeyInterceptListener设置为网格视图,消耗键事件直到Recyclerview滚动状态达到RecyclerView.SCROLL_STATE_IDLE,这将减少滚动速度并在滚动停止后仅聚焦下一个项目。滚动行为将类似于YouTube Android TV应用程序。
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()
        }
    }

0

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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接