android的ScrollView的简单使用

来源:互联网 发布:网络教育68所学校 编辑:程序博客网 时间:2024/05/18 09:21

android的ScrollView的简单使用

最近在做一个android电视项目,项目组有个需求,使用ScorllView包含一个TextView,然后根据TextView的内容动态的进行计算页数。由于是android电视,所以并没有像在手机上可以通过手势进行滑动,所以,只能通过按手机遥控板上的按键进行上下滑动。

  • 前言
  • ScrollView测量模式
  • ScrollView的滑动原理
  • ScrollView的应用
  • *总结

目录

[TOC]来生成目录:

  • android的ScrollView的简单使用
    • 目录
    • 前言
    • ScrollView测量模式
    • ScrollView的滑动原理
      • API介绍
      • ScrollView滑动坐标系
    • ScrollView的应用
      • 计算滑动的总页数
      • 一边滑动一边计算第几页
    • 总结

前言

一直想着有时间来写一篇博客,现在终于下定决心了,决定好好的把这件事给做下去。好了不多说了,开始进入正题。ScrollView最近一直在使用,所以在这儿做个总结。

ScrollView测量模式

ViewGroup的测量模式
EXACTLY(精确模式):表示子View设置了精确的值,一般当childView设置其宽、高为某一个精确值、或者说match_parent时,ViewGroup就会将其设置为EXACTLY;

AT_MOST(最大模式):表示子View被限制在一个最大值内,一般当子View设置其宽、高为wrap_content时,ViewGroup会将其设置为AT_MOST,即最大模式;

UNSPECIFIED:表示子布局想要多大就多大,一般出现在AadapterView的item的heightMode中、ScrollView的childView的heightMode中;此种模式比较少见。【所以这篇博客就专门针对ScrollView介绍】

ViewGroup的测量模式就是UNSPECIFIED,也就是说childView想多大就多大。
举个例子:

 <ScrollView           android:layout_width="200dp"            android:layout_height="200dp">            <TextView                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:textColor="@color/colorPrimary"                android:textSize="@dimen/ac_scroll_textsize"                android:text="@string/test_scrollview"/>  </ScrollView>

在这个例子中TextView的高度是wrap_content,由于ScrollView的测量模式是UNSPECIFIED,所以就会导致当TextView的文字过多时,高度超过ScrollView,而且在屏幕中只会显示ScrollView高度的TextView,剩余的就只需通过滑动查看。

ScrollView的滑动原理

android中有一个监听ScrollView滑动的方法,该方法是:setOnScrollChangeListener(但是这个方法是API>23才能使用,所以如果需要兼容23一下的,需要自己继承ScrollView,来处理了.这里就不再做讨论)。这个方法会回调onScrollChanged方法。这里要给大家说的就是onScrollChange的API。

@Override    protected void onScrollChanged(int l, int t, int oldl, int oldt) {        super.onScrollChanged(l, t, oldl, oldt);        if (changeListener!=null){            changeListener.onScrollChange(this,l,t,oldl,oldt);        }    }

API介绍:

l:滑动之后的x的坐标。
t:滑动之后的y的坐标。
oldl:滑动之前的x坐标。
oldt:滑动之前的y坐标。
咋一看好像说得挺有道理,我就打印Log信息测试了一下(这里以Y方向滑动为例),发现当我们向下滑动的时候,t的值会越来越小,反之,当我们向上滑动的时候t的值会越来越小。,这个就和对坐标系的理解有关系了。不多说了,直接上图。

ScrollView滑动坐标系

这里写图片描述

描述:以ScrollView的左上角为坐标原点,从左向右为X轴的正方向,从上往下为Y轴的正方向建立坐标系,当ScrollView上滑的时候(也就是我们实际中看到的滑动)其实是手机(移动的相机)向下滑的时候,所以Y的值会越来越大。相反也会一样。理解了这个以后就知道一切了!

ScrollView的应用

计算滑动的总页数

这个比较简单,总页数=(ScrollView高度-ChildView高度)/ScrollView高度,如果有余数结果就再加一,相信大家在代码中获取View的高度应该没有问题,所以这里就不再介绍。

一边滑动一边计算第几页

这个问题其实也不复杂,这里以手指向上滑动为例子,向上滑动也就是相当于手机(移动相机)向下移动,Y的值会越来越大。
第一步:确定滑动的区间:【0,ChildView高度-ScrollView高度】
第二步:根据距离计算页数,【0,ScrollView高度】时候是第一页,显示1/总的页数,【ScrollView高度,2*ScrollView高度】时候是2/中页数,。。。。。,然后就根据这个就可以发现规律了。
如果当前滑动的距离t(api中的t)=0,那么当前页数应该是1;
其他情况:t>0时候,当前页数=2+当前滑动的距离t(api中的t)/ScrollView高度;
这个剩下的就是数学问题了,哈哈!

总结

综上所述,ScrollView的简单介绍就搞定了,希望能对你们有帮助,同时有错误的请指正谢谢!