前言  春节即至,谨代表Android中文翻译组全体同仁祝大家身体健康,工作顺利!从第一篇译稿2010年8月27发布至今天2011年1月27整5个月,共发布100篇译文,3个合集,在新的一年里,翻译组仍将坚持 Android相关的翻译工作,秉承开源、合作、共享和坚持的信念打持久战,感谢大家的关心和支持!  本章内容是 android.widget.ScrollView,版本为Android 2.3 r1,翻译来自"pengyouhong",再次感谢"pengyouhong" !期待你一起参与Android API的翻译,联系我[email protected]。 声明  欢迎转载,但请保留文章原始出处:)    CSDN社区:http://www.csdn.net/    Android中文翻译组:http://goo.gl/6vJQl 正文
  一、结构public class ScrollView extends FrameLayout        java.lang.Objectandroid.view.View         android.view.ViewGroup                   android.widget.FrameLayout                            android.widget.ScrollView
   二、概述  一种可供用户滚动的层次结构布局容器,允许显示比实际多的内容。ScrollView是一种FrameLayout,意味需要在其上放置有自己滚动内容的子元素。子元素可以是一个复杂的对象的布局管理器。通常用的子元素是垂直方向的LinearLayout,显示在最上层的垂直方向可以让用户滚动的箭头。  TextView类也有自己的滚动功能,所以不需要使用ScrollView,但是只有两个结合使用,才能保证显示较多内容时候的效率。但只有两者结合使用才可以实现在一个较大的容器中一个文本视图效果。  ScrollView只支持垂直方向的滚动。
   三、构造函数public ScrollView (Context context)创建一个默认属性的ScrollView实例。 public ScrollView (Context context, AttributeSet attrs)创建一个带有attrs属性的ScrollView 实例。 public ScrollView (Context context, AttributeSet attrs, int defStyle)创建一个带有attrs属性,并且指定其默认样式的ScrollView实例。
   四、公共方法   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坐标
 
  五、补充    文章精选        Android ApiDemos/ScrollView2 添加自动滚动和智能焦点切换        [Android学习指南]使用ScrollView实现滚动效果        Android中ScrollView与ListView共用问题的解决方案   六、译者其他译文    android 中文 api (64) —— Scroller   七、通知    由于年前事情较多,合集4将推迟到年后发布,时间约为2011年2月9日或10日,请大家谅解 :) 
  八、原文
    全文查看