Android开发:TableFixHeaders源码分析
最近需要在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源码分析的更多相关文章
- Android开发Settings源码分析之主界面加载(二)
现在都说互联网寒冬,其实只要自身技术能力够强,咱们就不怕!我这边专门针对Android开发工程师整理了一套[Android进阶学习视频].[全套Android面试秘籍].[Android知识点PDF] ...
- Android网络框架源码分析一---Volley
转载自 http://www.jianshu.com/p/9e17727f31a1?utm_campaign=maleskine&utm_content=note&utm_medium ...
- OpenGL—Android 开机动画源码分析一
.1 Android开机动画实现方式目前实现Android开机动画的方式主要是逐帧动画和OpenGL动画. ?逐帧动画 逐帧动画是一种常见的动画形式(Frame By Frame),其原理是在“连续的 ...
- Android分包MultiDex源码分析
转载请标明出处:http://blog.csdn.net/shensky711/article/details/52845661 本文出自: [HansChen的博客] 概述 Android开发者应该 ...
- Android -- 消息处理机制源码分析(Looper,Handler,Message)
android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个Message Queue(消息队列),但是MQ被封装到Looper里面了,我们不会直接与MQ打交道,因 ...
- [Android]简略的Android消息机制源码分析
相关源码 framework/base/core/java/andorid/os/Handler.java framework/base/core/java/andorid/os/Looper.jav ...
- Android Doze模式源码分析
科技的仿生学无处不在,给予我们启发.为了延长电池是使用寿命,google从蛇的冬眠中得到体会,那就是在某种情况下也让手机进入类冬眠的情况,从而引入了今天的主题,Doze模式,Doze中文是打盹儿,打盹 ...
- Android消息机制源码分析
本篇主要介绍Android中的消息机制,即Looper.Handler是如何协同工作的: Looper:主要用来管理当前线程的消息队列,每个线程只能有一个Looper Handler:用来将消息(Me ...
- Android 开机动画源码分析
Android系统在启动SystemServer进程时,通过两个阶段来启动系统所有服务,在第一阶段启动本地服务,如SurfaceFlinger,SensorService等,在第二阶段则启动一系列的J ...
- Android开源框架源码分析:Okhttp
一 请求与响应流程 1.1 请求的封装 1.2 请求的发送 1.3 请求的调度 二 拦截器 2.1 RetryAndFollowUpInterceptor 2.2 BridgeInterceptor ...
随机推荐
- JavaScriptCore全面解析 (上篇)
收录待用,修改转载已取得腾讯云授权 作者 | 殷源 编辑 | 迷鹿 殷源,专注移动客户端开发,微软Imagine Cup中国区特等奖获得者,现就职于腾讯. JavaScript越来越多地出现在我们客户 ...
- websocket 和 socket.io 之间的区别
socket.io封装了websocket,同时包含了其它的连接方式,比如Ajax.原因在于不是所有的浏览器都支持websocket,通过socket.io的封装,你不用关心里面用了什么连接方式.你在 ...
- js获取url參数值的两种方式具体解释
有个url例如以下: http://passport.csdn.net/account/login? from=http%3a%2f%2fwrite.blog.csdn.net%2fpostedit ...
- js获取本页的来源地址
document.referrer 该属性可以获取到文档的载入地址 需要注意必须是通过改变localtion的href属性或a标签跳转才能获取到 否者将获取到空字符串
- js var ImgObj=new Image();
API地址: 1 https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement 下面来看看Image到底是个什么东东,我先将Ima ...
- 获取表数据的插入SQL
DECLARE @TABLE_NAME VARCHAR(200) SET @TABLE_NAME = 'myFunction' --表名 DECLARE @TABLE_CONDITION VARCHA ...
- Audio简介
本片只简单从硬件角度简介Audio AC97/HDA Audio总线分两种: (1)I2S (2)HDA HD Audio spec Audio verb table是用来初始化audio的,一个au ...
- Atitit.编程语言新特性 通过类库框架模式增强 提升草案 v3 q27
Atitit.编程语言新特性 通过类库框架模式增强 提升草案 v3 q27 1. 修改历史2 2. 适用语言::几乎所有编程语言.语言提升的三个渠道::语法,类库,框架,ide2 2.1. 单根继承 ...
- mysql命令:set sql_log_bin=on/off
对于数据库的操作,经常需要暂时停止对bin-log日志的写入,那就需要这个命令:set sql_log_bin=on/off 参考:dev.mysql.com/doc/refman/5.5/en/se ...
- Netbeans取消CTRL+\才能代码提示的方法
更好的方法: ------------------------------------------------------------ 边打字边按CTRL+\进行代码提示的方法我TM也是醉了 简而言之 ...