您的位置:首页 > 移动开发 > Android开发

android——HorizontalScrollView

2012-05-24 15:10 253 查看
[align=left]一、结构[/align]

[align=left]public class HorizontalScrollView extends FrameLayout[/align]
[align=left]Java.lang.Object[/align]
[align=left]android.view.View[/align]
[align=left]android.view.ViewGroup[/align]
[align=left]android.widget.FrameLayout[/align]
[align=left]android.widget.HorizontalScrollView[/align]

[align=left]二、概述[/align]
[align=left][/align]

[align=left]用于布局的容器,可以放置让用户使用滚动条查看的视图层次结构,允许视图结构比手机的屏幕大。HorizontalScrollView是一种FrameLayout(框架布局),其子项被滚动查看时是整体移动的,并且子项本身可以是一个有复杂层次结构的布局管理器。一个常见的应用是子项在水平方向中,用户可以滚动显示顶层水平排列的子项(items)。[/align]
[align=left]HorizontalScrollView不可以和ListView同时用,因为ListView有自己的滚动条设置。最重要的是,如果在需要显示很大的list的情况下,两者同时用则会使ListView在一些重要的优化上失效。出现这种失效的原因在于,HorizontalScrollView会*ListView用HorizontalScrollView本身提供的空间容器(infinite container)来显示完整的列表。[/align]
[align=left]类似的情况,TextView也有自己的滚动条,所以不需要ScrollView。但这两者是可以同时使用的,使用的结果会是在一个更大的容器里显示文本视图。[/align]
[align=left]HorizontalScrollView只支持水平方向的滚动显示。[/align]

[align=left]三、公共方法[/align]

public void
addView (View child)
[align=left]添加一个子视图。若这个子视图没有被设置布局参数,则使用ViewGroup的缺省参数。[/align]
[align=left]参数[/align]
[align=left]child 要添加的子视图[/align]
public void
addView (View child, int index)
[align=left]添加一个子视图。若这个子视图没有被设置布局参数,则使用ViewGroup的缺省参数。[/align]
[align=left]参数[/align]
[align=left]child 要添加的子视图[/align]
[align=left]index 子视图要加入的位置[/align]
public void
addView (View child, int index, ViewGroup.LayoutParams params)
[align=left]添加一个带有指定布局参数的子视图。[/align]
[align=left]参数[/align]
[align=left]child 要添加的子视图[/align]
[align=left]index 子视图要加入的位置[/align]
[align=left]params 子视图的布局参数[/align]
public void
addView (View child, ViewGroup.LayoutParams params)
[align=left]添加一个带有指定布局参数的子视图。[/align]
[align=left]参数[/align]
[align=left]child 要添加的子视图[/align]
[align=left]params 子视图的布局参数[/align]
public boolean
arrowScroll (int direction)
[align=left]响应点击左右箭头时对滚动条的处理。[/align]
[align=left]参数[/align]
[align=left]direction The direction corresponding to the arrow key that was pressed箭头按键所表示的方向[/align]
[align=left]返回值[/align]
[align=left]若此事件成功完成,则返回true;否则返回false。[/align]
public void
computeScroll ()
[align=left]被父视图调用,用于必要时候对其子视图的值(mScrollX和mScrollY)进行更新。典型的情况如:父视图中某个子视图使用一个Scroller对象来实现滚动操作,会使得此方法被调用。[/align]
public boolean
dispatchKeyEvent (KeyEvent event)
[align=left]按照可以获得焦点的顺序(从视图树的顶端到当前获得焦点的视图),分派一个按键事件给下一个视图。若此视图为焦点视图,事件将会分派给它自己。否则它将按照顺序,分派给下一个节点。此方法同时触动所有按键监听器。[/align]
[align=left]参数[/align]
[align=left]event 被分派的事件.[/align]
[align=left]返回值[/align]
[align=left]若事件被处理,则返回true;否则为false[/align]
public void
draw (Canvas canvas)
[align=left]手动绘制视图(及其子视图)到指定的画布(Canvas)。这个视图必须在调用这个函数之前做好了整体布局。。当实现一个视图时,不需要继承这个方法;相反,你应该实现onDraw(Canvas)方法。[/align]
[align=left]参数[/align]
[align=left]canvas 绘制视图的画布[/align]
public boolean
executeKeyEvent (KeyEvent event)
[align=left]需要通过按键事件来实现滚动操作时,可以调用此方法。效果类似于由视图树型结构分派事件。[/align]
[align=left]参数[/align]
[align=left]event 需要执行的事件[/align]
[align=left]返回值[/align]
[align=left]若事件被处理,则返回true;否则为false[/align]
public void
fling (int velocityX)
[align=left]滚动视图的fling手势。[/align]
[align=left]参数[/align]
[align=left]velocityX 方向的初始速率。正值表示手指/光标向屏幕右边滑动,而内容相对向左滚动。[/align]
public boolean
fullScroll (int direction)
[align=left]处理按下”home/end”快捷键之后的滚动响应。此方法会将视图移左或移右,同时将焦点赋予移动后可视的最左或最右的组件。如果没有任何组件适合得到焦点,此scrollview将收回焦点。[/align]
[align=left]参数[/align]
[align=left]direction 滚动方向:FOCUS_LEFT表示向视图的左边移动,FOCUS_RIGHT表示向视图的右边移动[/align]
[align=left]返回值[/align]
[align=left]若此方法消耗(consumed)了按键事件则返回true,否则返回false。[/align]
public int
getMaxScrollAmount ()
[align=left]返回值[/align]
[align=left]按左右箭头时视图可以滚动的最大值。[/align]
public boolean
isFillViewport ()
[align=left]表示此ScrollView的内容是否被拉伸以适应视口(viewport)的大小。[/align]
[align=left]返回值[/align]
[align=left]若内容填充了视口则返回true,否则返回false。[/align]
public boolean
isSmoothScrollingEnabled ()
[align=left]返回值[/align]
[align=left]按箭头方向滚动时,是否显示滚动的平滑效果。[/align]
public boolean
onInterceptTouchEvent (MotionEvent ev)
[align=left]使用此方法可以拦截所有触摸屏动作引发的事件。这意味着你可以监视分派给子项的事件,并且可以拿到任何当前手势的所有权。[/align]
[align=left]使用此方法需谨慎。因为它与View.onTouchEvent(MotionEvent)有相当复杂的交互影响。这两者都必须同时正确地实现。事件将按以下顺序来被方法接收:[/align]
[align=left]1. 接收到down事件[/align]
[align=left]2. 事件将被视图组的一个子视图处理,或者被传递给自己的onTouchEvent()方法处理;这意味着你必须实现onTouchEvent(),并且返回true,这样才可以接着接受到其他的手势(而不是寻求一个父视图来处理它)。onTouchEvent()返回true后,你将不再接受到onInterceptTouchEvent()的任何事件,同时所有对触摸动作的处理必须像往常一样在onTouchEvent()中进行。[/align]
[align=left]3. 如果返回false,则接下来的每个事件(所有的up事件,包含最后一个up)将会首先被传递到这里,然后到目标对象view的onTouchEvent()。[/align]
[align=left]4. 如果返回ture,你将不会接收到以下任何事件:目标view将会接收到相同的事件,但是带着ACTION_CANCEL的动作。所有在此之后的事件将会被传递到你的onTouchEvent()方法中,并且不再在这里出现。[/align]
[align=left]参数[/align]
[align=left]ev 沿着树型结构往下分派的动作事件[/align]
[align=left]返回值[/align]
[align=left]若将动作事件从子视图中截获并通过onTouchEvent()将他们分派给当前ViewGroup,则返回true。当前目标将收到一个ACTION_CANCEL事件,并且不再会有其他消息被传递到这里。[/align]
public boolean
onTouchEvent (MotionEvent ev)
[align=left]此方法用于处理触摸屏的动作事件。[/align]
[align=left]参数[/align]
[align=left]ev 动作事件[/align]
[align=left]返回值[/align]
[align=left]若事件被成功处理,则返回true;否则返回false[/align]
public boolean
pageScroll (int direction)
[align=left]处理按下”page up/down”快捷键之后的滚动响应。此方法会将视图往左或往右滚动一个页面的距离,同时将焦点赋予移动后可视的最左或最右的组件。如果没有任何组件适合得到焦点,此scrollview将收回焦点。[/align]
[align=left]参数[/align]
[align=left]direction 滚动方向:FOCUS_LEFT表示向视图的左边移动一个页面FOCUS_RIGHT表示向视图的右边移动一个页面[/align]
[align=left]返回值[/align]
[align=left]若此方法处理(consumed)了按键事件则返回true,否则返回false。[/align]
public void
requestChildFocus (View child, View focused)
[align=left]当父视图的一个子视图要获得焦点时,调用此方法。[/align]
[align=left]参数[/align]
[align=left]child 要获得焦点的子视图。此视图将包含焦点视图,但其本身不必为焦点。[/align]
[align=left]focused 事实上拥有焦点的子视图的下层视图。[/align]
public boolean
requestChildRectangleOnScreen (View child, Rect rectangle, boolean immediate)
[align=left]当组里的某个子视图需要被定位在屏幕的某个矩形范围时,调用此方法。重载此方法的ViewGroup可确认以下几点:[/align]
[align=left]* 子项目将是组里的直系子项[/align]
[align=left]* 矩形将在子项目的坐标体系中[/align]
[align=left]重载此方法的ViewGroup应该支持以下几点:[/align]
[align=left]* 若矩形已经是可见的,则没有东西会改变[/align]
[align=left]* 为使矩形区域全部可见,视图将可以被滚动显示[/align]
[align=left]参数[/align]
[align=left]child 发出请求的子视图[/align]
[align=left]rectangle 子项目坐标系内的矩形,即此子项目希望在屏幕上的定位[/align]
[align=left]immediate 设为true,则禁止动画和平滑移动滚动条[/align]
[align=left]返回值[/align]
[align=left]进行了滚动操作的这个组(group),是否处理此操作[/align]
public void
requestLayout ()
[align=left]当出现使视图布局失效的改变时,调用此方法。它将规划一个视图树的布局路径。[/align]
public void
scrollTo (int x, int y)
[align=left]设置视图滚动后的位置。这将引起onScrollChanged(int,int,int,int)的调用,同时使此视图失效。[/align]
[align=left]此版本同时将滚动锁定于子视图的范围。[/align]
[align=left]参数[/align]
[align=left]x 要滚动到的x位置[/align]
[align=left]y 要滚动到的y位置[/align]
public void
setFillViewport (boolean fillViewport)
[align=left]设置此滚动视图是否将内容宽度拉伸来适应视口(viewport)。[/align]
[align=left]参数[/align]
[align=left]fillViewport 设置为true表示将拉伸内容宽度;否则会设置为false。[/align]
public void
setOverScrollMode (int mode)
[align=left]为视图设置over-scroll模式。有效的over-scroll模式有OVER_SCROLL_ALWAYS(缺省值),OVER_SCROLL_IF_CONTENT_SCROLLS(只允许当视图内容大过容器时,进行over-scrolling)和OVER_SCROLL_NEVER。只有当视图可以滚动时,此项设置才起作用。[/align]
[align=left]参数[/align]
[align=left]mode 视图的新over-scroll模式值[/align]
public void
setSmoothScrollingEnabled (boolean smoothScrollingEnabled)
[align=left]设置是否呈现按下箭头后的平滑滚动效果(动画效果)。[/align]
[align=left]参数[/align]
[align=left]smoothScrollingEnabled 设置是否呈现平滑滚动效果[/align]
public final void
smoothScrollBy (int dx, int dy)
[align=left]类似scrollBy(int, int),但是呈现平滑滚动,而非瞬间滚动(译者注:瞬间滚动——指不显示滚动过程,直接显示滚动后达到的位置)。[/align]
[align=left]参数[/align]
[align=left]dx 要滚动的X轴像素差值(译者注:横向像素差值)[/align]
[align=left]dy 要滚动的Y轴像素差值(译者注:纵向像素差值)[/align]
public final void
smoothScrollTo (int x, int y)
[align=left]类似scrollTo(int, int),但是呈现平滑滚动,而不是瞬间滚动。[/align]
[align=left]参数[/align]
[align=left]x 滚动要到达位置的X轴值[/align]
[align=left]y 滚动要到达位置的Y轴值[/align]

[align=left]四、受保护方法[/align]

protected int
computeHorizontalScrollOffset ()
[align=left]计算水平方向滚动条的滑块的偏移值。此值用来计算滚动时滑块的位置。[/align]
[align=left]偏移值的范围可以以任何单位表示,但必须与computeHorizontalScrollRange()和computeHorizontalScrollExtent()的单位一致。[/align]
[align=left]缺省的偏移值为视图滚动的偏移差值。[/align]
[align=left]返回值[/align]
[align=left]滚动条滑块在水平方向上的偏移值[/align]
protected int
computeHorizontalScrollRange ()
[align=left]scroll view 的可滚动水平范围是所有子视图的宽度总合。[/align]
[align=left]返回值[/align]
[align=left]水平滚动条表示的全部水平滚动范围[/align]
protected int
computeScrollDeltaToGetChildRectOnScreen (Rect rect)
[align=left]计算X方向滚动的总合,以便在屏幕上显示子视图的完整矩形(或者,若矩形宽度超过屏幕宽度,至少要填满第一个屏幕大小)。[/align]
[align=left]参数[/align]
[align=left]rect 矩形[/align]
[align=left]返回值[/align]
[align=left]滚动差值[/align]
protected float
getLeftFadingEdgeStrength ()
[align=left]返回左渐变边缘的强度或密集度。强度的值介于0.0(无渐变)到1.0(全渐变)之间。缺省实现只返回0.0或1.0,而不返回中间值。子类必须重载次方法来给滚动动作提供更平滑的渐变过程。[/align]
[align=left]返回值[/align]
[align=left]左渐变的强度,即介于0.0f和1.0f之间的浮点值[/align]
protected float
getRightFadingEdgeStrength ()
[align=left]返回右渐变边缘的强度或密集度。强度的值介于0.0(无渐变)到1.0(全渐变)之间。缺省实现只返回0.0或1.0,而不返回中间值。子类必须重载此方法来给滚动动作提供更平滑的渐变过程。[/align]
[align=left]返回值[/align]
[align=left]右渐变的强度,即介于0.0f和1.0f之间的浮点值[/align]
protected void
measureChild (View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec)
[align=left]要求子视图测量自身,需要将视图的MeasureSpec和其附加内容同时考虑在内。getChildMeasureSpec在其中承担了重要角色,它计算出MeasureSpec,并传递给子视图。[/align]
[align=left]参数[/align]
[align=left]child 要测量的子视图[/align]
[align=left]parentWidthMeasureSpec 此视图的宽度要求[/align]
[align=left]parentHeightMeasureSpec 此视图的高度要求[/align]
protected void
measureChildWithMargins (View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed)
[align=left]要求子视图测量自身,需要将视图的MeasureSpec、附加内容和边缘部分同时考虑在内。子项必须有MarginLayoutParams(边缘布局参数)。getChildMeasureSpec在其中承担了重要角色,它计算出MeasureSpec,并传递给子视图。[/align]
[align=left]参数[/align]
[align=left]child 要测量的子视图[/align]
[align=left]parentWidthMeasureSpec 此视图的宽度要求[/align]
[align=left]widthUsed 被父视图(也可能是其他子视图)占用的横向额外空间[/align]
[align=left]parentHeightMeasureSpec 此视图的高度要求[/align]
[align=left]heightUsed 被父视图(也可能是其他子视图)占用的纵向额外空间[/align]
protected void
onLayout (boolean changed, int l, int t, int r, int b)
[align=left]当此视图要给每个子视图赋值大小和位置时,layout会调用此方法。子项的派生类应当重载此方法,并且调用各个子项的layout。[/align]
[align=left]参数[/align]
[align=left]changed 此视图有新的大小或位置[/align]
[align=left]l 左边界位置,相对于父视图[/align]
[align=left]t 上边界位置,相对于父视图[/align]
[align=left]r 右边界位置,相对于父视图[/align]
[align=left]b 下边界位置,相对于父视图[/align]
protected void
onMeasure (int widthMeasureSpec, int heightMeasureSpec)
[align=left]调用此方法来确定本身和所包含内容的大小(宽度和高度)。此方法被measure(int,int)唤起,而且必须被子类重载以得到所包含内容的确切大小。[/align]
[align=left]注意:当重载此方法时,必须调用setMeasureDimension(int,int)来保存View的大小。如果没有做到,将会引发一个measure(int,int)抛出的IllegalStateException(非法状态错误)。超类onMeasure(int,int)可以被调用。[/align]
[align=left]编写基类的确认大小的方法,缺省情况下是根据其背景大小来确认,除非MeasureSepc允许有更大的高度或宽度。子类必须重载onMeasure(int,int)以得到对其内容大小的更准确的测量。[/align]
[align=left]若此方法被重载,它的子类需要确保其高度和宽度至少达到View所规定的最小值(可通过getSuggestedMinimumHeight()和getSuggestedMinimumWidth()得到)。[/align]
[align=left]参数[/align]
[align=left]widthMeasureSpec 受上一层大小影响下的对水平空间的要求。可参看View.MeasureSpec。[/align]
[align=left]heightMeasureSpec 受上一层大小影响下的对垂直空间的要求。可参看View.MeasureSpec。[/align]
protected void
onOverScrolled (int scrollX, int scrollY, boolean clampedX, boolean clampedY)
[align=left]被overScrollBy(int, int, int, int, int, int, int, int, boolean)调用,来对一个over-scroll操作的结果进行响应。[/align]
[align=left]参数[/align]
[align=left]scrollX 新的X滚动像素值[/align]
[align=left]scrollY 新的Y滚动像素值[/align]
[align=left]clampedX 当scrollX被over-scroll的边界限制时,值为true[/align]
[align=left]clampedY 当scrollY被over-scroll的边界限制时,值为true[/align]
protected boolean
onRequestFocusInDescendants (int direction, Rect previouslyFocusedRect)
[align=left]当在某个scroll view的子视图中寻找焦点时,需要小心不能让屏幕之外的组件得到焦点。这比缺省ViewGroup的实现代价更高,否则此行为被设为缺省。[/align]
[align=left]参数[/align]
[align=left]direction 值可以为FOCUS_UP,FOCUS_DOWN,FOCUS_LEFT或 FOCUS_RIGHT[/align]
[align=left]previouslyFocusedRect 能够给出一个较好的提示的矩形(当前视图的坐标系统)表示焦点从哪里得来。如果没有提示则为null。[/align]
[align=left]返回值[/align]
[align=left]是否取到了焦点。[/align]
protected void
onSizeChanged (int w, int h, int oldw, int oldh)
[align=left]当View的大小改变时此方法被调用。如果View是刚刚被加入,则视之前的值为0。[/align]
[align=left]参数[/align]
[align=left]w View的当前宽度[/align]
[align=left]h View的当前高度[/align]
[align=left]oldw View大小改变之前的宽度[/align]

[align=left]oldh View大小改变之前的高度[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: