最近需要在android上的展示表格数据,在github上找到了TableFixHeaders(https://github.com/InQBarna/TableFixHeaders)。

项目文件最主要的有下面几个类

1、TableFixHeaders继承自viewGroup,是视图文件,负责展示和滑动交互

2、TableAdapter和BaseTableAdapter,类似于listview的adapter,使用TableFixHeaders需要继承BaseTableAdapter实现其中的方法

3、Recycler,View堆栈负责管理可视范围外的对象

TableFixHeaders在调用setAdapter方法的时候进行一些变量初始化,然后调用requestLayout进行绘制,onMeasure方法计算视图的高度和宽度,onLayout方法绘制表格,表格的绘制原理,是将表格分为四个部分,左上角的一块,顶部的固定行,左侧的固定列,和滚动的数据主体,做法是将绘制出一个个格子,分别计算出位置,一个个放上去(其实就是绝对定位每个格子的位置)。

滚动的实现是在xml上设置android:scrollbars="horizontal|vertical",这样view在内容超过可视范围的时候出现滚动条,和scrollbar相关的方法有下面几个

1、computeHorizontalScrollExtent(computeVerticalScrollExtent),计算横向(纵向)滚动条的宽度

2、computeHorizontalScrollOffset(computeVerticalScrollOffset),计算横向(纵向)滚动条的偏移量

3、computeHorizontalScrollRange(computeVerticalScrollRange),计算横向(纵向)滚动条范围

作者覆盖上面这些方法的主要目的是显示滚动条的时候,只出现在数据主体部分,这样给人的感觉好像滚动的只有数据主体,滚动的方法主要是下面几个

1、scrollTo设置滚动到哪,debug的时候发现,好像没怎么调用

2、scrollBy根据传递进来的x,y值进行滚动计算将可视外的view放入recycle中,将可见的view从recycle中取出

3、onTouchEvent,通过监视手势来控制滚动(scrollby)。脉冲的滚动是通过velocityTracker类,监视移动速率,当速率超过设置的值得时候,调用flinger(自定义的类)开启异步线程滚动视图(scrollby)

Android开发:TableFixHeaders源码分析的更多相关文章

  1. Android开发Settings源码分析之主界面加载(二)

    现在都说互联网寒冬,其实只要自身技术能力够强,咱们就不怕!我这边专门针对Android开发工程师整理了一套[Android进阶学习视频].[全套Android面试秘籍].[Android知识点PDF] ...

  2. Android网络框架源码分析一---Volley

    转载自 http://www.jianshu.com/p/9e17727f31a1?utm_campaign=maleskine&utm_content=note&utm_medium ...

  3. OpenGL—Android 开机动画源码分析一

    .1 Android开机动画实现方式目前实现Android开机动画的方式主要是逐帧动画和OpenGL动画. ?逐帧动画 逐帧动画是一种常见的动画形式(Frame By Frame),其原理是在“连续的 ...

  4. Android分包MultiDex源码分析

    转载请标明出处:http://blog.csdn.net/shensky711/article/details/52845661 本文出自: [HansChen的博客] 概述 Android开发者应该 ...

  5. Android -- 消息处理机制源码分析(Looper,Handler,Message)

    android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个Message Queue(消息队列),但是MQ被封装到Looper里面了,我们不会直接与MQ打交道,因 ...

  6. [Android]简略的Android消息机制源码分析

    相关源码 framework/base/core/java/andorid/os/Handler.java framework/base/core/java/andorid/os/Looper.jav ...

  7. Android Doze模式源码分析

    科技的仿生学无处不在,给予我们启发.为了延长电池是使用寿命,google从蛇的冬眠中得到体会,那就是在某种情况下也让手机进入类冬眠的情况,从而引入了今天的主题,Doze模式,Doze中文是打盹儿,打盹 ...

  8. Android消息机制源码分析

    本篇主要介绍Android中的消息机制,即Looper.Handler是如何协同工作的: Looper:主要用来管理当前线程的消息队列,每个线程只能有一个Looper Handler:用来将消息(Me ...

  9. Android 开机动画源码分析

    Android系统在启动SystemServer进程时,通过两个阶段来启动系统所有服务,在第一阶段启动本地服务,如SurfaceFlinger,SensorService等,在第二阶段则启动一系列的J ...

  10. Android开源框架源码分析:Okhttp

    一 请求与响应流程 1.1 请求的封装 1.2 请求的发送 1.3 请求的调度 二 拦截器 2.1 RetryAndFollowUpInterceptor 2.2 BridgeInterceptor ...

随机推荐

  1. C#秘密武器之LINQ to SQL

    LINQ to SQL语句(1)之Where 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操 ...

  2. 笛卡尔树 POJ ——1785 Binary Search Heap Construction

    相应POJ 题目:点击打开链接 Binary Search Heap Construction Time Limit: 2000MS   Memory Limit: 30000K Total Subm ...

  3. Yii2.0 下使用 composer 安装七牛

    最近在捣鼓一个网站,要上传图片,于是选择了七牛.由于Yii2.0框架本身并不具有七牛用来上传图片的接口,只能自己动手给Yii2.0框架安装七牛了. 首先在根目录下的 composer.json 进行配 ...

  4. C#运用反射调用其他程序集中的代码

    加载程序集 AssMedicalAdvice = Assembly.LoadFrom(Path.Combine(Environment.CurrentDirectory, "Inscript ...

  5. 基于iOS 10、realm封装的下载器

    代码地址如下:http://www.demodashi.com/demo/11653.html 概要 在决定自己封装一个下载器前,我本以为没有那么复杂,可在实际开发过程中困难重重,再加上iOS10和X ...

  6. java之static关键字

    介绍: 1.在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份. 2.用static声明的方法为静态方 ...

  7. AMD 3600+ X2 CPU配合昂达A69T主板超频教程

    本次超频使用电脑硬件配置如下: AMD 3600+ X2 90nm 昂达 A69T HDMI 宇瞻 DDR II 1G 667普条 西数 WD2500KS SATAII  250G 16M 戴尔 普通 ...

  8. 未能加载文件或程序集“WebGrease, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)

    方法一:在web.config的configuration接点中添加,最好是添加在configuration节点的最后 <runtime> <assemblyBinding xmln ...

  9. mac apt-get--> Homebrew

    在最近采集linux进程网络指标的时候,为了对比采集结果,需要linux系统查看进程网络流量命令,最后查到nethogs 这个工具好用,但是在下载安装过程中碰到问题: 1:http://blog.cs ...

  10. View的setTag和getTag使用

    在listview 优化其中,会使用到setTag()以及getTag()方法 代码例如以下: @Override public View getView(int position, View con ...