声明html
欢迎转载,但请保留文章原始出处:) java
博客园:http://www.cnblogs.com/android
Android中文翻译组:http://goo.gl/6vJQlcanvas
正文windows
public class ScrollView extends FrameLayoutapi
java.lang.Objectapp
android.view.View函数
android.view.ViewGroup布局
android.widget.FrameLayout学习
android.widget.ScrollView
2、概述
一种可供用户滚动的层次结构布局容器,容许显示比实际多的内容。ScrollView是一种FrameLayout
,意味须要在其上放置有本身滚动内容的子元素。子元素能够是一个复杂的对象的布局管理器。一般用的子元素是垂直方向的LinearLayout
,显示在最上层的垂直方向可让用户滚动的箭头。
TextView
类也有本身的滚动功能,因此不须要使用ScrollView,可是只有两个结合使用,才能保证显示较多内容时候的效率。但只有二者结合使用才能够实如今一个较大的容器中一个文本视图效果。
ScrollView只支持垂直方向的滚动。
3、构造函数
public ScrollView (Context context)
建立一个默认属性的ScrollView实例。
public ScrollView (Context context, AttributeSet attrs)
建立一个带有attrs属性的ScrollView 实例。
public ScrollView (Context context, AttributeSet attrs, int defStyle)
建立一个带有attrs属性,而且指定其默认样式的ScrollView实例。
4、公共方法
public void addView (View child)
添加子视图。若是事先没有给子视图设置layout参数,会采用当前ViewGroup的默认参数来设置子视图。
参数
child 所添加的子视图
public void addView (View child, int index)
添加子视图。若是事先没有给子视图设置layout参数,会采用当前ViewGroup的默认参数来设置子视图。
参数
child 所添加的子视图
index 添加子视图的位置
public void addView (View child, int index, ViewGroup.LayoutParams params)
根据指定的layout参数添加子视图
参数
child 所添加的子视图
index 添加子视图的位置
params 为子视图设置的layout参数
public void addView (View child, ViewGroup.LayoutParams params)
根据指定的layout参数添加子视图。
参数
child 所添加的子视图
params 为子视图设置的layout参数
public boolean arrowScroll (int direction)
响应点击上下箭头时对滚动条滚动的处理。
参数
direction 按下的箭头所对应的方向
返回值
若是咱们处理(消耗)了此事件返回true,不然返回false。
public void computeScroll ()
被父视图调用,用于必要时候对其子视图的值(mScrollX和mScrollY)进行更新。典型的状况如:父视图中某个子视图使用一个Scroller
对象来实现滚动操做,会使得此方法被调用。
public boolean dispatchKeyEvent (KeyEvent event)
发送一个key事件给当前焦点路径的下一个视图。此焦点路径从视图树的顶层执行直到当前焦点视图。若是此视图为焦点视图,将为本身发送。不然,会为当前焦点路径的下一个节点发送。此方法也会激起一个key监听器。
参数
event 发送的key事件
返回值
事件被处理返回true,不然返回false。
public void draw (Canvas canvas)
手动绘制视图(及其子视图)到指定的画布(Canvas)。这个视图必须在调用这个函数以前作好了总体布局。当实现一个视图时,不须要继承这个方法;相反,你应该实现onDraw(Canvas)
方法。
参数
canvas 绘制视图的画布
public boolean executeKeyEvent (KeyEvent event)
当接收到key事件时,用户能够调用此函数来使滚动视图执行滚动,相似于处理由视图体系发送的事件。
参数
event 须要执行key的事件
返回值
事件被处理返回true,不然返回false。
public void fling (int velocityY)
滚动视图的滑动(fling)手势。(译者注: 如何监听android的屏幕滑动中止事件)
参数
velocityY Y方向的初始速率。正值表示手指/光标向屏幕下方滑动,而内容将向上滚动。
public boolean fullScroll (int direction)
对响应“home/end”短按时响应滚动处理。此方法将视图滚动到顶部或者底部,而且将焦点置于新的可视区域的最顶部/最底部组件。若没有适合的组件作焦点,当前的ScrollView会收回焦点。
参数
direction 滚动方向:FOCUS_UP
表示视图向上滚动;FOCUS_DOWN
表示视图向下滚动
返回值
若key事件被消耗(consumed)返回true,其余状况返回false。
public int getMaxScrollAmount ()
返回值
当前滚动视图响应箭头事件可以滚动的最大数。
public boolean isFillViewport ()
指示当前ScrollView的内容是否被拉伸以填充视图可视范围(译者注:viewport可视范围,参见决定Scrollviewer里面Control的可视范围)。
返回值
内容填充视图返回true,不然返回false。
public boolean isSmoothScrollingEnabled ()
返回值
按箭头方向滚动时,是否显示滚动的平滑效果。
public boolean onInterceptTouchEvent (MotionEvent ev)
实现此方法是为了拦截全部触摸屏幕时的运动事件。能够像处理发送给子视图的事件同样去监视这些事件,而且获取当前手势在任意点的ownership
使用此方法时候须要注意,由于它与View.onTouchEvent(MotionEvent)
有至关复杂的交互,而且前提须要正确执行View.onTouchEvent(MotionEvent)
。事件将按照以下顺序接收到:
1. 收到down事件
2. Down事件或者由视图组的一个子视图处理,或者被用户本身的onTouchEvent()方法处理;此处理意味你应该执行onTouchEvent()时返回true,这样才能继续看到剩下的手势(取代找一个父视图处理)。若是onTouchEvent()返回true时,你不会收到onInterceptTouchEvent()的任何事件而且全部对触摸的处理必须在onTouchEvent()中发生。
3. 若是此方法返回false,接下来的事件(up to and including the final up)将最早被传递当此,而后是目标的onTouchEvent()。
4. 若是返回true,将不会收到如下任何事件:目标view将收到一样的事件可是会伴随ACTION_CANCEL
,而且全部的更进一步的事件将会传递到你本身的onTouchEvent()方法中而不会再在这里出现。
参数
ev 体系向下发送的动做事件
返回值
若是将运动事件从子视图中截获而且经过onTouchEvent()发送到当前ViewGroup ,返回true。当前目标将会收到ACTION_CANCEL事件,而且再也不会有其余消息传递到此。
(译者注:onInterceptTouchEvent和onTouchEvent调用时序)
public boolean onTouchEvent (MotionEvent ev)
执行此方法为了处理触摸屏幕的运动事件。
参数
ev 运动事件
返回值
事件被处理返回true,其它返回false。
public boolean pageScroll (int direction)
响应短按“page up/ down”时候对滚动的处理。此方法将向上或者向下滚动一屏,而且将焦点置于新可视区域的最上/最下。若是没有适合的component做为焦点,当前scrollView将收回焦点。
参数
direction 滚动方向:FOCUS_UP
表示向上翻一页,FOCUS_DOWN
表示向下翻一页。
返回值
此key事件被消耗(cosumed)返回true,其余返回false。
public void requestChildFocus (View child, View focused)
当父视图的一个子视图的要得到焦点时,调用此方法。
参数
child 要得到焦点的父视图的子视图。此视图包含了焦点视图。若是没有特殊徐要求,此视图实际上就是焦点视图。
focused 子视图的子孙视图而且此子孙视图是真正的焦点视图
public boolean requestChildRectangleOnScreen (View child, Rect rectangle, boolean immediate)
当组里的某个子视图须要被定位在屏幕的某个矩形范围时,调用此方法。重载此方法的ViewGroup
可确认如下几点:
* 子项目将是组里的直系子项
* 矩形将在子项目的坐标体系中
重载此方法的ViewGroup
应该支持如下几点:
* 若矩形已是可见的,则没有东西会改变
* 为使矩形区域所有可见,视图将能够被滚动显示
参数
child 发出请求的子视图
rectangle 子项目坐标系内的矩形,即此子项目但愿在屏幕上的定位
immediate 设为true,则禁止动画和平滑移动滚动条
返回值
进行了滚动操做的这个组(group),是否处理此操做。
public void requestLayout ()
当有改变引发当前视图从新布局时,调用此函数。它将规划一个视图树的layout路径。
public void scrollTo (int x, int y)
设置当前视图滚动到的位置。此函数会引发对onScrollChanged(int, int, int, int)
函数的调用而且会让视图更新。
当前版本取消了在子视图中的滚动。
参数
x 滚动到的X位置
y 滚动到的Y位置
public void setFillViewport (boolean fillViewport)
设置当前滚动视图是否将内容高度拉伸以填充视图可视范围(译者注:viewport可视范围,参见决定Scrollviewer里面Control的可视范围)。
参数
fillViewport 设置为true表示拉伸内容高度来适应视口边界;其余设为false。
public void setOverScrollMode (int mode)
为视图设置over-scroll模式。有效的over-scroll模式有OVER_SCROLL_ALWAYS
(缺省值),OVER_SCROLL_IF_CONTENT_SCROLLS
(只容许当视图内容大过容器时,进行over-scrolling)和OVER_SCROLL_NEVER
。只有当视图能够滚动时,此项设置才起做用。
(译者注:这个函数是2.3 r1 中新增的,API Level 9。关于over-scroll这里译为弹性滚动,即,参见帖子:相似iPhone的弹性ListView滚动)
参数
mode The new over-scroll mode for this view.
public void setSmoothScrollingEnabled (boolean smoothScrollingEnabled)
用来设置箭头滚动是否能够引起视图滚动。
参数
smoothScrollingEnabled 设置箭头滚动是否能够引发内容的滚动的bool值
public final void smoothScrollBy (int dx, int dy)
相似于scrollBy(int, int)
,可是滚动时候是平缓的而不是当即滚动到某处。
参数
dx 在X方向滚动的像素数
dy 在Y方向滚动的像素数
public final void smoothScrollTo (int x, int y)
相似于scrollTo(int, int)
,可是滚动时候是平缓的而不是当即滚动到某处。
参数
x 要滚动到位置的X坐标
y 要滚动到位置的Y坐标
5、受保护方法
protected int computeScrollDeltaToGetChildRectOnScreen (Rect rect)
计算X方向滚动的总合,以便在屏幕上显示子视图的完整矩形(或者,若矩形宽度超过屏幕宽度,至少要填满第一个屏幕大小)。
参数
rect 矩形
返回值
滚动差值
protected int computeVerticalScrollOffset ()
计算垂直方向滚动条的滑块的偏移。此值用来计算滚动条轨迹的滑块的位置。
范围能够以任意单位表示,可是必须与computeVerticalScrollRange()
和computeVerticalScrollExtent()
的单位一致。
缺省的偏移是在当前视图滚动的偏移。
返回值
滚动条的滑块垂直方向的偏移。
protected int computeVerticalScrollRange ()
滚动视图的可滚动范围是全部子元素的高度。
返回值
由垂直方向滚动条表明的全部垂直范围,缺省的范围是当前视图的画图高度。
protected float getBottomFadingEdgeStrength ()
返回滚动底部的能见度。能见度的值的范围是0.0(没有消失)到1.0(彻底消失)之间。缺省的执行返回值为0.0或者1.0,而不是他们中间的某个值。滚动时子类须要重载这个方法来提供一个平缓的渐隐的实现。
返回值
滚动底部能见度,值的范围在浮点数0.0f到1.0f之间。
protected float getTopFadingEdgeStrength ()
返回滚动顶部的能见度。能见度的值的范围是0.0(没有消失)到1.0(彻底消失)之间。缺省的执行返回值为0.0或者1.0,而不是他们中间的某个值。滚动时子类须要重载这个方法来提供一个平缓的渐隐的实现。
返回值
滚动顶部能见度,值的范围在浮点数0.0f到1.0f之间。
protected void measureChild (View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec)
要求当前视图的一个子视图测量本身,同时兼顾到当前视图的MeasureSpec的要求和它的空白。子视图必须有MarginLayoutParams。比较复杂的工做是在getChildMeasureSpec中完成的。
参数
child 须要本身测量的子视图
parentWidthMeasureSpec 当前视图要求的宽度
parentHeightMeasureSpec 当前视图要求的宽度
protected void measureChildWithMargins (View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed)
要求当前视图的一个子视图测量本身,同时兼顾到当前视图的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)
被overScrollBy(int, int, int, int, int, int, int, int, boolean)
调用,来对一个over-scroll操做的结果进行响应。(译者注:这个函数是2.3 r1 中新增的,API Level 9)
参数
scrollX 新的X滚动像素值
scrollY 新的Y滚动像素值
clampedX 当scrollX被over-scroll的边界限制时,值为true
clampedY 当scrollY被over-scroll的边界限制时,值为true
protected boolean onRequestFocusInDescendants (int direction, Rect previouslyFocusedRect)
当在滚动视图的子视图中查找焦点视图时,须要注意不要将焦点设置在滚动出屏幕外的控件上。此方法会比执行缺省的ViewGroup
代价高,不然此行为也会设置为缺省
参数
direction 指定下列常量之一:FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, FOCUS_RIGHT
previouslyFocusedRect 可以给出一个较好的提示的矩形(当前视图的坐标系统)表示焦点从哪里得来。若是没有提示为null。
返回值
是否取得了焦点
protected void onSizeChanged (int w, int h, int oldw, int oldh)
布局期间当视图的大小发生改变时调用。若是只是添加到视图,调用时显示的是旧值。(译者注:也就是添加到视图时,oldw和oldh返回的是)。
参数
w 视图当前宽度
h 视图当前高度
oldw 视图改变前的宽度
oldh 视图改变前的高度
6、补充
示例代码
7、译者其余译文