天天看点

Android 中文 API (100) —— ScrollView

正文

  一、结构

public class ScrollView extends FrameLayout

java.lang.Object

android.view.View

         android.view.ViewGroup

                   android.widget.FrameLayout

                            android.widget.ScrollView

  二、概述

  ScrollView只支持垂直方向的滚动。

  三、构造函数

创建一个默认属性的ScrollView实例。

创建一个带有attrs属性的ScrollView 实例。

创建一个带有attrs属性,并且指定其默认样式的ScrollView实例。

  四、公共方法

         添加子视图。如果事先没有给子视图设置layout参数,会采用当前ViewGroup的默认参数来设置子视图。

                参数

                       child       所添加的子视图

  添加子视图。如果事先没有给子视图设置layout参数,会采用当前ViewGroup的默认参数来设置子视图。

    参数

   child       所添加的子视图

                index      添加子视图的位置

  根据指定的layout参数添加子视图

  参数

               child       所添加的子视图

               index      添加子视图的位置

               params   为子视图设置的layout参数

  根据指定的layout参数添加子视图。

  public boolean arrowScroll (int direction)

  响应点击上下箭头时对滚动条滚动的处理。

                       direction        按下的箭头所对应的方向

  返回值

  如果我们处理(消耗)了此事件返回true,否则返回false。

  public void computeScroll ()

         发送一个key事件给当前焦点路径的下一个视图。此焦点路径从视图树的顶层执行直到当前焦点视图。如果此视图为焦点视图,将为自己发送。否则,会为当前焦点路径的下一个节点发送。此方法也会激起一个key监听器。

                       event     发送的key事件

  事件被处理返回true,否则返回false。

  public void draw (Canvas canvas)

  canvas    绘制视图的画布

  当接收到key事件时,用户可以调用此函数来使滚动视图执行滚动,类似于处理由视图体系发送的事件。

  event     需要执行key的事件

  public void fling (int velocityY)

                       velocityY      Y方向的初始速率。正值表示手指/光标向屏幕下方滑动,而内容将向上滚动。

  public boolean fullScroll (int direction)

  对响应“home/end”短按时响应滚动处理。此方法将视图滚动到顶部或者底部,并且将焦点置于新的可视区域的最顶部/最底部组件。若没有适合的组件做焦点,当前的ScrollView会收回焦点。

  若key事件被消耗(consumed)返回true,其他情况返回false。

  public int getMaxScrollAmount ()

  当前滚动视图响应箭头事件能够滚动的最大数。

  public boolean isFillViewport ()

  内容填充视图返回true,否则返回false。

  public boolean isSmoothScrollingEnabled ()

               按箭头方向滚动时,是否显示滚动的平滑效果。

  实现此方法是为了拦截所有触摸屏幕时的运动事件。可以像处理发送给子视图的事件一样去监视这些事件,并且获取当前手势在任意点的ownership

  1.    收到down事件

  2.    Down事件或者由视图组的一个子视图处理,或者被用户自己的onTouchEvent()方法处理;此处理意味你应该执行onTouchEvent()时返回true,这样才能继续看到剩下的手势(取代找一个父视图处理)。如果onTouchEvent()返回true时,你不会收到onInterceptTouchEvent()的任何事件并且所有对触摸的处理必须在onTouchEvent()中发生。

  3.    如果此方法返回false,接下来的事件(up to and including the final up)将最先被传递当此,然后是目标的onTouchEvent()。

               ev          体系向下发送的动作事件

  如果将运动事件从子视图中截获并且通过onTouchEvent()发送到当前ViewGroup ,返回true。当前目标将会收到ACTION_CANCEL事件,并且不再会有其他消息传递到此。

  执行此方法为了处理触摸屏幕的运动事件。

       ev          运动事件

  事件被处理返回true,其它返回false。

  public boolean pageScroll (int direction)

  响应短按“page up/ down”时候对滚动的处理。此方法将向上或者向下滚动一屏,并且将焦点置于新可视区域的最上/最下。如果没有适合的component作为焦点,当前scrollView将收回焦点。

  此key事件被消耗(cosumed)返回true,其他返回false。

  当父视图的一个子视图的要获得焦点时,调用此方法。

       child              要获得焦点的父视图的子视图。此视图包含了焦点视图。如果没有特殊徐要求,此视图实际上就是焦点视图。

                focused        子视图的子孙视图并且此子孙视图是真正的焦点视图

      * 子项目将是组里的直系子项

      * 矩形将在子项目的坐标体系中

      * 若矩形已经是可见的,则没有东西会改变

      * 为使矩形区域全部可见,视图将可以被滚动显示

  child        发出请求的子视图

  rectangle    子项目坐标系内的矩形,即此子项目希望在屏幕上的定位

  immediate   设为true,则禁止动画和平滑移动滚动条

        返回值

              进行了滚动操作的这个组(group),是否处理此操作。

  public void requestLayout ()

  当有改变引起当前视图重新布局时,调用此函数。它将规划一个视图树的layout路径。

  public void scrollTo (int x, int y)

当前版本取消了在子视图中的滚动。

       x     滚动到的X位置

                y     滚动到的Y位置

  public void setFillViewport (boolean fillViewport)

       fillViewport    设置为true表示拉伸内容高度来适应视口边界;其他设为false。

  public void setOverScrollMode (int mode)

         参数

                   mode       The new over-scroll mode for this view.

  public void setSmoothScrollingEnabled (boolean smoothScrollingEnabled)

  用来设置箭头滚动是否可以引发视图滚动。

                smoothScrollingEnabled    设置箭头滚动是否可以引起内容的滚动的bool值

  public final void smoothScrollBy (int dx, int dy)

       dx   在X方向滚动的像素数

       dy   在Y方向滚动的像素数

  public final void smoothScrollTo (int x, int y)

       x     要滚动到位置的X坐标

                y     要滚动到位置的Y坐标

  五、受保护方法

  计算X方向滚动的总合,以便在屏幕上显示子视图的完整矩形(或者,若矩形宽度超过屏幕宽度,至少要填满第一个屏幕大小)。

       rect        矩形

  滚动差值

  protected int computeVerticalScrollOffset ()

  计算垂直方向滚动条的滑块的偏移。此值用来计算滚动条轨迹的滑块的位置。

  缺省的偏移是在当前视图滚动的偏移。

  滚动条的滑块垂直方向的偏移。

  protected int computeVerticalScrollRange ()

  滚动视图的可滚动范围是所有子元素的高度。

  由垂直方向滚动条代表的所有垂直范围,缺省的范围是当前视图的画图高度。

  protected float getBottomFadingEdgeStrength ()

  返回滚动底部的能见度。能见度的值的范围是0.0(没有消失)到1.0(完全消失)之间。缺省的执行返回值为0.0或者1.0,而不是他们中间的某个值。滚动时子类需要重载这个方法来提供一个平缓的渐隐的实现。

  滚动底部能见度,值的范围在浮点数0.0f到1.0f之间。

  protected float getTopFadingEdgeStrength ()

  滚动顶部能见度,值的范围在浮点数0.0f到1.0f之间。

  要求当前视图的一个子视图测量自己,同时兼顾到当前视图的MeasureSpec的要求和它的空白。子视图必须有MarginLayoutParams。比较复杂的工作是在getChildMeasureSpec中完成的。

  child              需要自己测量的子视图

  parentWidthMeasureSpec        当前视图要求的宽度

  parentHeightMeasureSpec              当前视图要求的宽度

  要求当前视图的一个子视图测量自己,同时兼顾到当前视图的MeasureSpec的要求和它的空白和边界。子视图必须有MarginLayoutParams。比较复杂的工作是在getChildMeasureSpec中完成的。

  child             需要测量的子视图

  parentWidthMeasureSpec       当前视图要求的宽度

  widthUsed    水平方向上由父视图使用的空白 (也可能是视图的其他子视图使用的)

  parentHeightMeasureSpec      当前视图要求的宽度

  heightUsed 垂直方向上由父视图使用的空白 (也可能是视图的其他子视图使用的)

  protected void onLayout (boolean changed, int l, int t, int r, int b)

  当前视图需要为子视图分配大小和位置时候调用,子类继承必须要重载此方法并调用自己子视图的layout函数。

  changed       当前视图的新的大小或者位置

  l     相对父视图,左边界位置

  t     相对父视图,上边界位置

  r     相对父视图,右边界位置

  b    相对父视图,下边界位置

  protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

  测量视图以确定其内容宽度和高度。此方法被measure(int, int)调用。需要被子类重写以提供对其内容准确高效的测量。

  约定:当重写此方法时,你必须调用setMeasuredDimension(int, int)来保存当前视图view的宽度和高度。不成功调用此方法将会导致一个IllegalStateException异常,是由measure(int, int)抛出。所以调用父类的onMeasure(int, int)方法是必须的。

  父类的实现是以背景大小为默认大小,除非MeasureSpec(测量细则)允许更大的背景。子类可以重写onMeasure(int,int)以对其内容提供更佳的尺寸。

  如果此方法被重写,那么子类的责任是确认测量高度和测量宽度要大于视图view的最小宽度和最小高度(getSuggestedMinimumHeight() 和 getSuggestedMinimumWidth()),使用这两个方法可以取得最小宽度和最小高度。

  widthMeasureSpec   受主窗口支配的水平空间要求。这个需求通过 View.MeasureSpec.进行编码。

             heightMeasureSpec  受主窗口支配的垂直空间要求。这个需求通过 View.MeasureSpec.进行编码。

    protected void onOverScrolled (int scrollX, int scrollY, boolean clampedX, boolean clampedY)

  scrollX     新的X滚动像素值

  scrollY     新的Y滚动像素值

  clampedX        当scrollX被over-scroll的边界限制时,值为true

  clampedY        当scrollY被over-scroll的边界限制时,值为true

               direction 指定下列常量之一:FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT

previouslyFocusedRect 能够给出一个较好的提示的矩形(当前视图的坐标系统)表示焦点从哪里得来。如果没有提示为null。

  是否取得了焦点

  protected void onSizeChanged (int w, int h, int oldw, int oldh)

布局期间当视图的大小发生改变时调用。如果只是添加到视图,调用时显示的是旧值0。(译者注:也就是添加到视图时,oldw和oldh返回的是0)。

  w     视图当前宽度

  h     视图当前高度

  oldw       视图改变前的宽度

  oldh       视图改变前的高度

本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582392,如需转载请自行联系原作者

继续阅读