一、前言
自定义 View 是 Android 中高级工程师进阶的必经之路,要想熟练掌握自定义 View 技能,View 绘制流程和 View 事件分发机制必须掌握的,开发过程中大多数情况下都能在网上找到类似的效果,可能修修改改也能满足项目需求,但是一旦遇到比较棘手的问题,可能就会让开发者很苦恼。
本篇文章是自定义 View 结合 View 事件分发实现一个赛事得分表效果。
如果对自定义 View 不熟悉的朋友可以参考以下文章:
二、准备工作
1、先看效果
2、案例源码下载
3、应用知识点
- 自定义 View
- View 事件分发机制
- 设计模式-观察者模式
4、思路分析
- 根据效果图首先明确主页面是一个列表;
- 头部 Tab 栏可以水平滑动,所以父布局使用 HorizontalScrollView 实现;
- 列表 Item 分 2 部分,一部分是[头像和昵称],另一部分是[积分];
- 头部 Tab 栏水平滑动时,列表 Item 第二部分同步滑动;
- 熟悉事件分发的朋友都知道,看到这样的布局效果,肯定需要解决滑动冲突;
三、代码实现
1、自定义横向滚动控件
- 因为上面已经分析,头部 Tab 栏父布局和 item 第二部分同步滑动,所以都采用横向滚动控件完成,所以自定义横向滚动控件,继承 HorizontalScrollView 并重写构造方法,这里重写了 3 个构造方法。
public class CustomHScrollView extends HorizontalScrollView {
ScrollViewObserver mScrollViewObserver = new ScrollViewObserver();
public CustomHScrollView(Context context) {
super(context);
}
public CustomHScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomHScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}
- 定义外部可回调接口,当发生了滚动事件时接口,供外部访问