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 ...
随机推荐
- Netty源码细节IO线程(EventLoop)(转)
原文:http://budairenqin.iteye.com/blog/2215896 源码来自Netty5.x版本, 本系列文章不打算从架构的角度去讨论netty, 只想从源码细节展开, 又不想通 ...
- HTML5 Canvas 绘制库存变化折线 计算出最高最低库存
<!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type&quo ...
- JavaScript完整性检查
1.7个“坑” <!DOCTYPE html> <html lang="zh"> <head> <meta charset="U ...
- 去除前后空格,Oracle和SQLSERVER都适用。ltrim(rtrim(’ ‘))
Oracle自带去除方法:trim(). 但是sql语法中没有直接去除两头空格的函数,但有ltrim()去除左空格rtrim()去除右空格. 合起来用就是sql的trim()函数,即select lt ...
- Android Shape 详解
1 http://blog.csdn.net/feng88724/article/details/6398193 2 <shape xmlns:android="http://sche ...
- redis内存分析(转)
背景 线上经常遇到用户想知道自己 Redis 实例中数据的内存分布情况.为了不影响线上实例的使用,我们一般会采用 bgsave 生成 dump.rdb 文件,再结合 redis-rdb-tools 和 ...
- Audio简介
本片只简单从硬件角度简介Audio AC97/HDA Audio总线分两种: (1)I2S (2)HDA HD Audio spec Audio verb table是用来初始化audio的,一个au ...
- HIVE中join、semi join、outer join
补充说明 left outer join where is not null与left semi join的联系与区别:两者均可实现exists in操作,不同的是,前者允许右表的字段在select或 ...
- 图片懒加载lazyload.js详解
简介 lazyload.js用于长页面图片的延迟加载,视口外的图片会在窗口滚动到它的位置时再进行加载,这是与预加载相反的. 优点 它可以提高页面加载速度: 在某些情况清晰它也可以帮助减少服务器负载. ...
- linux命令ulimit 系统限制你打开一些资源数
#ulimit -a 查看系统的一些限制,比如在做并发测试时ab命令的请求书不能超过 1024个. 要更改 #ulimit -n 10240