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)

  • 相关阅读:
    你们要的Intellij IDEA 插件开发秘籍,来了!
    【JDK 11】关于 Java 模块系统,看这一篇就够了
    《水浒传》中的物价
    读书廿一日计划
    诗词记录
    PLSQL14不识别Oracle数据库以及tnsnames.ora中配置的连接串(连接远程Oracle,本地仅安装客户端)
    框架安全之Shiro渗透
    .NET 3.5 安装
    中间件安全之Nginx渗透
    中间件安全之JBoss渗透
  • 原文地址:https://www.cnblogs.com/tootwo2/p/6350278.html
Copyright © 2011-2022 走看看