zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    BZOJ.3990.[SDOI2015]排序(DFS)
    BZOJ.1040.[ZJOI2008]骑士(树形DP)
    BZOJ.2246.[SDOI2011]迷宫探险(DP 记忆化搜索 概率)
    BZOJ.3209.花神的数论题(数位DP)
    UVA.1640.The Counting Problem / BZOJ.1833.[ZJOI2010]数字计数(数位DP)
    HDU.3652.B-number(数位DP)
    BZOJ.4514.[SDOI2016]数字配对(费用流SPFA 二分图)
    BZOJ.4832.[Lydsy1704月赛]抵制克苏恩(期望DP)
    BZOJ.1025.[SCOI2009]游戏(背包DP)
    BZOJ.3257.树的难题(树形DP)
  • 原文地址:https://www.cnblogs.com/tootwo2/p/6350278.html
Copyright © 2011-2022 走看看