一起撸个简单粗暴的Tv应用主界面的网格布局控件(下)

本文详细介绍了如何为Android TV主界面的网格布局控件TvGridLayout添加自定义滑动策略。通过分析HorizontalScrollView的滑动原理和使用OverScroller,实现了在遥控器触发下动态计算滑动距离和时机的滑动效果,以满足不同业务场景的需求。
摘要由CSDN通过智能技术生成

上一篇中我们已经一起学了怎么简单粗暴的撸个支持动态布局的网格控件出来,但在上一篇的介绍中,并没有学习实现网格控件的滑动效果,所以本篇就来讲讲,要如何让我们的网格控件可以支持自定义滑动策略。

效果

当贝市场.gif

TvGridLayout示例

图一是Tv应用:当贝市场的主页

图二是咱自己撸的简单粗暴的 Tv 应用主界面网格控件:TvGridLayout 的示例,每个 Tab 下,每一屏的卡位大小、位置都是动态计算出来的。

实现

第一步:定义布局数据结构
第二步:自定义 TvGridLayout
第三步:自定义 Adapter
第四步:动态布局
第五步:初步使用

以上内容是在上一篇中讲解的内容,所以如果还没有看过上一篇的,建议先阅读上一篇一起撸个简单粗暴的Tv应用主界面的网格布局控件(上)。那么下面就开始我们今天的内容了:

第六步:内嵌 OverScroller 自定义滑动策略

首先,我们的网格控件是继承自 FrameLayout,那么它本身就是没有支持滑动的效果的,但是我们的网格控件又需要支持多屏显示,那么当焦点滑到当前屏之外时,自然就需要将下一屏的卡位滑动到屏幕内进行显示。

而实现滑动效果的方式有两种:

  • 将网格控件嵌套在 HorizontalScrollView
  • 自己在网格控件内部实现滑动效果

第一种方式实现最简单,我们只要将自己的网格控件 TvGridLayout 嵌套在 HorizontalScrollView 中,就可以实现滑动效果了。

虽然实现最简单,但缺点也很明显,就是滑动的策略只能按照 HorizontalScrollView 规则来,我们并没有办法进行修改。比如说,滑动的持续时长,滑动的距离,什么时候触发滑动等等。

产品的口味可是很刁钻的,单单使用默认的滑动策略,通常是很难满足产品的,虽然也可以通过一些反射等手段来修改 HorizontalScrollView 的默认实现,但有点复杂,且容易出问题。

本着不怕瞎折腾的精神,网格控件既然都已经自己撸了,那滑动的实现干脆也来自己撸好了。

6.1 实现滑动的方式

想要让一个控件滑动起来的方式很多很多:

  • 动画
  • ViewGroup#onLayout()
  • View#scrollTo(), View#scrollBy()
  • OverScroller

动画也行,重新对子 View 布局,修改子 View 位置也行,调用 View 自带的 scrollTo(), scrollBy() 也行,或者直接用系统提供的滑动辅助类 OverScroller 也行,都行,方式很多,只要能够让控件动起来就行。所以,让 View 动起来一直就不是个问题,问题是要怎么滑,什么时候滑,滑多长,滑多久,这些问题才是撸个滑动功能的问题所在。

6.2 HorizontalScrollView 滑动原理

既然滑动要自己撸,那当然是要先参考一下 Google 大神的实现思路了,所以首先就先来看看 HorizontalScrollView 的滑动原理是怎样的?

有一点需要先提一下的是,由于我们是着重分析 Tv 应用的滑动效果,也就是说是由遥控器来触发的滑动效果,那么 HorizontalScrollView 内部跟手指触摸相关的滑动原理就不分析了,着重分析跟 Tv 相关的滑动原理即可。

而 Tv 应用由于都是通过遥控器事件即 KeyEvent 来进行 ui 的交互,那么,理所当然,要查看 HorizontalScrollView 的滑动原理的话,就需要跟着 dispat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值