正文
一、結構
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,如需轉載請自行聯系原作者