自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

10分鐘詳細(xì)解讀android scrollview

移動開發(fā) Android
一種可供用戶滾動的層次結(jié)構(gòu)布局容器,允許顯示比實際多的內(nèi)容。ScrollView是一種FrameLayout,意味需要在其上放置有自己滾動內(nèi)容的子元素。子元素可以是一個復(fù)雜的對象的布局管理器。通常用的子元素是垂直方向的LinearLayout,顯示在最上層的垂直方向可以讓用戶滾動的箭頭。

結(jié)構(gòu)

繼承關(guān)系

public class ScrollView extends FrameLayout

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.FrameLayout

android.widget.ScrollView

類概述

一種可供用戶滾動的層次結(jié)構(gòu)布局容器,允許顯示比實際多的內(nèi)容。ScrollView是一種FrameLayout,意味需要在其上放置有自己滾動內(nèi)容的子元素。子元素可以是一個復(fù)雜的對象的布局管理器。通常用的子元素是垂直方向的LinearLayout,顯示在最上層的垂直方向可以讓用戶滾動的箭頭。

TextView類也有自己的滾動功能,所以不需要使用ScrollView,但是只有兩個結(jié)合使用,才能保證顯示較多內(nèi)容時候的效率。但只有兩者結(jié)合使用才可以實現(xiàn)在一個較大的容器中一個文本視圖效果。

ScrollView只支持垂直方向的滾動。

構(gòu)造函數(shù)

public ScrollView (Context context)

創(chuàng)建一個默認(rèn)屬性的ScrollView實例。

public ScrollView (Context context, AttributeSet attrs)

創(chuàng)建一個帶有attrs屬性的ScrollView 實例。

public ScrollView (Context context, AttributeSet attrs, int defStyle)

創(chuàng)建一個帶有attrs屬性,并且指定其默認(rèn)樣式的ScrollView實例。

公共方法

public void addView (View child)

添加子視圖。如果事先沒有給子視圖設(shè)置layout參數(shù),會采用當(dāng)前ViewGroup的默認(rèn)參數(shù)來設(shè)置子視圖。

參數(shù)

child 所添加的子視圖

public void addView (View child, int index)

添加子視圖。如果事先沒有給子視圖設(shè)置layout參數(shù),會采用當(dāng)前ViewGroup的默認(rèn)參數(shù)來設(shè)置子視圖。

參數(shù)

child 所添加的子視圖

index 添加子視圖的位置

public void addView (View child, int index, ViewGroup.LayoutParams params)

根據(jù)指定的layout參數(shù)添加子視圖

參數(shù)

child 所添加的子視圖

index 添加子視圖的位置

params 為子視圖設(shè)置的layout參數(shù)

public void addView (View child, ViewGroup.LayoutParams params)

根據(jù)指定的layout參數(shù)添加子視圖。

參數(shù)

child 所添加的子視圖

params 為子視圖設(shè)置的layout參數(shù)

public boolean arrowScroll (int direction)

響應(yīng)點擊上下箭頭時對滾動條滾動的處理。

參數(shù)

direction 按下的箭頭所對應(yīng)的方向

返回值

如果我們處理(消耗)了此事件返回true,否則返回false。

public void computeScroll ()

被父視圖調(diào)用,用于必要時候?qū)ζ渥右晥D的值(mScrollX和mScrollY)進行更新。典型的情況如:父視圖中某個子視圖使用一個Scroller對象來實現(xiàn)滾動操作,會使得此方法被調(diào)用。

public boolean dispatchKeyEvent (KeyEvent event)

發(fā)送一個key事件給當(dāng)前焦點路徑的下一個視圖。此焦點路徑從視圖樹的頂層執(zhí)行直到當(dāng)前焦點視圖。如果此視圖為焦點視圖,將為自己發(fā)送。否則,會為當(dāng)前焦點路徑的下一個節(jié)點發(fā)送。此方法也會激起一個key監(jiān)聽器。

參數(shù)

event 發(fā)送的key事件

返回值

事件被處理返回true,否則返回false。

public void draw (Canvas canvas)

手動繪制視圖(及其子視圖)到指定的畫布(Canvas)。這個視圖必須在調(diào)用這個函數(shù)之前做好了整體布局。當(dāng)實現(xiàn)一個視圖時,不需要繼承這個方法;相反,你應(yīng)該實現(xiàn)onDraw(Canvas)方法。

參數(shù)

canvas 繪制視圖的畫布

public boolean executeKeyEvent (KeyEvent event)

當(dāng)接收到key事件時,用戶可以調(diào)用此函數(shù)來使?jié)L動視圖執(zhí)行滾動,類似于處理由視圖體系發(fā)送的事件。

參數(shù)

event 需要執(zhí)行key的事件

返回值

事件被處理返回true,否則返回false。

public void fling (int velocityY)

滾動視圖的滑動(fling)手勢。(譯者注: 如何監(jiān)聽android的屏幕滑動停止事件)

參數(shù)

velocityY Y方向的初始速率。正值表示手指/光標(biāo)向屏幕下方滑動,而內(nèi)容將向上滾動。

public boolean fullScroll (int direction)

對響應(yīng)“home/end”短按時響應(yīng)滾動處理。此方法將視圖滾動到頂部或者底部,并且將焦點置于新的可視區(qū)域的最頂部/***部組件。若沒有適合的組件做焦點,當(dāng)前的ScrollView會收回焦點。

參數(shù)

direction 滾動方向:FOCUS_UP表示視圖向上滾動;FOCUS_DOWN表示視圖向下滾動

返回值

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

public int getMaxScrollAmount ()

返回值

當(dāng)前滾動視圖響應(yīng)箭頭事件能夠滾動的***數(shù)。

public boolean isFillViewport ()

指示當(dāng)前ScrollView的內(nèi)容是否被拉伸以填充視圖可視范圍(譯者注:viewport可視范圍,參見決定Scrollviewer里面Control的可視范圍)。

返回值

內(nèi)容填充視圖返回true,否則返回false。

public boolean isSmoothScrollingEnabled ()

返回值

按箭頭方向滾動時,是否顯示滾動的平滑效果。

public boolean onInterceptTouchEvent (MotionEvent ev)

實現(xiàn)此方法是為了攔截所有觸摸屏幕時的運動事件??梢韵裉幚戆l(fā)送給子視圖的事件一樣去監(jiān)視這些事件,并且獲取當(dāng)前手勢在任意點的ownership

使用此方法時候需要注意,因為它與View.onTouchEvent(MotionEvent)有相當(dāng)復(fù)雜的交互,并且前提需要正確執(zhí)行View.onTouchEvent(MotionEvent)。事件將按照如下順序接收到:

1. 收到down事件

2. Down事件或者由視圖組的一個子視圖處理,或者被用戶自己的onTouchEvent()方法處理;此處理意味你應(yīng)該執(zhí)行onTouchEvent()時返回true,這樣才能繼續(xù)看到剩下的手勢(取代找一個父視圖處理)。如果onTouchEvent()返回true時,你不會收到onInterceptTouchEvent()的任何事件并且所有對觸摸的處理必須在onTouchEvent()中發(fā)生。

3. 如果此方法返回false,接下來的事件(up to and including the final up)將***被傳遞當(dāng)此,然后是目標(biāo)的onTouchEvent()。

4. 如果返回true,將不會收到以下任何事件:目標(biāo)view將收到同樣的事件但是會伴隨ACTION_CANCEL,并且所有的更進一步的事件將會傳遞到你自己的onTouchEvent()方法中而不會再在這里出現(xiàn)。

參數(shù)

ev 體系向下發(fā)送的動作事件

返回值

如果將運動事件從子視圖中截獲并且通過onTouchEvent()發(fā)送到當(dāng)前ViewGroup ,返回true。當(dāng)前目標(biāo)將會收到ACTION_CANCEL事件,并且不再會有其他消息傳遞到此。

、

public boolean onTouchEvent (MotionEvent ev)

執(zhí)行此方法為了處理觸摸屏幕的運動事件。

參數(shù)

ev 運動事件

返回值

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

public boolean pageScroll (int direction)

響應(yīng)短按“page up/ down”時候?qū)L動的處理。此方法將向上或者向下滾動一屏,并且將焦點置于新可視區(qū)域的最上/最下。如果沒有適合的component作為焦點,當(dāng)前scrollView將收回焦點。

參數(shù)

direction 滾動方向:FOCUS_UP表示向上翻一頁,F(xiàn)OCUS_DOWN表示向下翻一頁。

返回值

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

public void requestChildFocus (View child, View focused)

當(dāng)父視圖的一個子視圖的要獲得焦點時,調(diào)用此方法。

參數(shù)

child 要獲得焦點的父視圖的子視圖。此視圖包含了焦點視圖。如果沒有特殊徐要求,此視圖實際上就是焦點視圖。

focused 子視圖的子孫視圖并且此子孫視圖是真正的焦點視圖

public boolean requestChildRectangleOnScreen (View child, Rect rectangle, boolean immediate)

當(dāng)組里的某個子視圖需要被定位在屏幕的某個矩形范圍時,調(diào)用此方法。重載此方法的ViewGroup可確認(rèn)以下幾點:

* 子項目將是組里的直系子項

* 矩形將在子項目的坐標(biāo)體系中

重載此方法的ViewGroup應(yīng)該支持以下幾點:

* 若矩形已經(jīng)是可見的,則沒有東西會改變

* 為使矩形區(qū)域全部可見,視圖將可以被滾動顯示

參數(shù)

child 發(fā)出請求的子視圖

rectangle 子項目坐標(biāo)系內(nèi)的矩形,即此子項目希望在屏幕上的定位

immediate 設(shè)為true,則禁止動畫和平滑移動滾動條

返回值

進行了滾動操作的這個組(group),是否處理此操作。

public void requestLayout ()

當(dāng)有改變引起當(dāng)前視圖重新布局時,調(diào)用此函數(shù)。它將規(guī)劃一個視圖樹的layout路徑。

public void scrollTo (int x, int y)

設(shè)置當(dāng)前視圖滾動到的位置。此函數(shù)會引起對onScrollChanged(int, int, int, int)函數(shù)的調(diào)用并且會讓視圖更新。

當(dāng)前版本取消了在子視圖中的滾動。

參數(shù)

x 滾動到的X位置

y 滾動到的Y位置

public void setFillViewport (boolean fillViewport)

設(shè)置當(dāng)前滾動視圖是否將內(nèi)容高度拉伸以填充視圖可視范圍(譯者注:viewport可視范圍,參見決定Scrollviewer里面Control的可視范圍)。

參數(shù)

fillViewport 設(shè)置為true表示拉伸內(nèi)容高度來適應(yīng)視口邊界;其他設(shè)為false。

public void setOverScrollMode (int mode)

為視圖設(shè)置over-scroll模式。有效的over-scroll模式有OVER_SCROLL_ALWAYS(缺省值),OVER_SCROLL_IF_CONTENT_SCROLLS(只允許當(dāng)視圖內(nèi)容大過容器時,進行over-scrolling)和OVER_SCROLL_NEVER。只有當(dāng)視圖可以滾動時,此項設(shè)置才起作用。

(譯者注:這個函數(shù)是2.3 r1 中新增的,API Level 9。關(guān)于over-scroll這里譯為彈性滾動,即,參見帖子:類似iPhone的彈性ListView滾動)

參數(shù)

mode The new over-scroll mode for this view.

public void setSmoothScrollingEnabled (boolean smoothScrollingEnabled)

用來設(shè)置箭頭滾動是否可以引發(fā)視圖滾動。

參數(shù)

smoothScrollingEnabled 設(shè)置箭頭滾動是否可以引起內(nèi)容的滾動的bool值

public final void smoothScrollBy (int dx, int dy)

類似于scrollBy(int, int),但是滾動時候是平緩的而不是立即滾動到某處。

參數(shù)

dx 在X方向滾動的像素數(shù)

dy 在Y方向滾動的像素數(shù)

public final void smoothScrollTo (int x, int y)

類似于scrollTo(int, int),但是滾動時候是平緩的而不是立即滾動到某處。

參數(shù)

x 要滾動到位置的X坐標(biāo)

y 要滾動到位置的Y坐標(biāo)

受保護方法

protected int computeScrollDeltaToGetChildRectOnScreen (Rect rect)

計算X方向滾動的總合,以便在屏幕上顯示子視圖的完整矩形(或者,若矩形寬度超過屏幕寬度,至少要填滿***個屏幕大?。?/p>

參數(shù)

rect 矩形

返回值

滾動差值

protected int computeVerticalScrollOffset ()

計算垂直方向滾動條的滑塊的偏移。此值用來計算滾動條軌跡的滑塊的位置。

范圍可以以任意單位表示,但是必須與computeVerticalScrollRange()和computeVerticalScrollExtent()的單位一致。

缺省的偏移是在當(dāng)前視圖滾動的偏移。

返回值

滾動條的滑塊垂直方向的偏移。

protected int computeVerticalScrollRange ()

滾動視圖的可滾動范圍是所有子元素的高度。

返回值

由垂直方向滾動條代表的所有垂直范圍,缺省的范圍是當(dāng)前視圖的畫圖高度。

protected float getBottomFadingEdgeStrength ()

返回滾動底部的能見度。能見度的值的范圍是0.0(沒有消失)到1.0(完全消失)之間。缺省的執(zhí)行返回值為0.0或者1.0,而不是他們中間的某個值。滾動時子類需要重載這個方法來提供一個平緩的漸隱的實現(xiàn)。

返回值

滾動底部能見度,值的范圍在浮點數(shù)0.0f到1.0f之間。

protected float getTopFadingEdgeStrength ()

返回滾動頂部的能見度。能見度的值的范圍是0.0(沒有消失)到1.0(完全消失)之間。缺省的執(zhí)行返回值為0.0或者1.0,而不是他們中間的某個值。滾動時子類需要重載這個方法來提供一個平緩的漸隱的實現(xiàn)。

返回值

滾動頂部能見度,值的范圍在浮點數(shù)0.0f到1.0f之間。

protected void measureChild (View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec)

要求當(dāng)前視圖的一個子視圖測量自己,同時兼顧到當(dāng)前視圖的MeasureSpec的要求和它的空白。子視圖必須有MarginLayoutParams。比較復(fù)雜的工作是在getChildMeasureSpec中完成的。

參數(shù)

child 需要自己測量的子視圖

parentWidthMeasureSpec 當(dāng)前視圖要求的寬度

parentHeightMeasureSpec 當(dāng)前視圖要求的寬度

protected void measureChildWithMargins (View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed)

要求當(dāng)前視圖的一個子視圖測量自己,同時兼顧到當(dāng)前視圖的MeasureSpec的要求和它的空白和邊界。子視圖必須有MarginLayoutParams。比較復(fù)雜的工作是在getChildMeasureSpec中完成的。

參數(shù)

child 需要測量的子視圖

parentWidthMeasureSpec 當(dāng)前視圖要求的寬度

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

parentHeightMeasureSpec 當(dāng)前視圖要求的寬度

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

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

當(dāng)前視圖需要為子視圖分配大小和位置時候調(diào)用,子類繼承必須要重載此方法并調(diào)用自己子視圖的layout函數(shù)。

參數(shù)

changed 當(dāng)前視圖的新的大小或者位置

l 相對父視圖,左邊界位置

t 相對父視圖,上邊界位置

r 相對父視圖,右邊界位置

b 相對父視圖,下邊界位置

protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)

測量視圖以確定其內(nèi)容寬度和高度。此方法被measure(int, int)調(diào)用。需要被子類重寫以提供對其內(nèi)容準(zhǔn)確高效的測量。

約定:當(dāng)重寫此方法時,你必須調(diào)用setMeasuredDimension(int, int)來保存當(dāng)前視圖view的寬度和高度。不成功調(diào)用此方法將會導(dǎo)致一個IllegalStateException異常,是由measure(int, int)拋出。所以調(diào)用父類的onMeasure(int, int)方法是必須的。

父類的實現(xiàn)是以背景大小為默認(rèn)大小,除非MeasureSpec(測量細(xì)則)允許更大的背景。子類可以重寫onMeasure(int,int)以對其內(nèi)容提供更佳的尺寸。

如果此方法被重寫,那么子類的責(zé)任是確認(rèn)測量高度和測量寬度要大于視圖view的最小寬度和最小高度(getSuggestedMinimumHeight() 和 getSuggestedMinimumWidth()),使用這兩個方法可以取得最小寬度和最小高度。

參數(shù)

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)調(diào)用,來對一個over-scroll操作的結(jié)果進行響應(yīng)。(譯者注:這個函數(shù)是2.3 r1 中新增的,API Level 9)

參數(shù)

scrollX 新的X滾動像素值

scrollY 新的Y滾動像素值

clampedX 當(dāng)scrollX被over-scroll的邊界限制時,值為true

clampedY 當(dāng)scrollY被over-scroll的邊界限制時,值為true

protected boolean onRequestFocusInDescendants (int direction, Rect previouslyFocusedRect)

當(dāng)在滾動視圖的子視圖中查找焦點視圖時,需要注意不要將焦點設(shè)置在滾動出屏幕外的控件上。此方法會比執(zhí)行缺省的ViewGroup代價高,否則此行為也會設(shè)置為缺省

參數(shù)

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

previouslyFocusedRect 能夠給出一個較好的提示的矩形(當(dāng)前視圖的坐標(biāo)系統(tǒng))表示焦點從哪里得來。如果沒有提示為null。

返回值

是否取得了焦點

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

布局期間當(dāng)視圖的大小發(fā)生改變時調(diào)用。如果只是添加到視圖,調(diào)用時顯示的是舊值0。(譯者注:也就是添加到視圖時,oldw和oldh返回的是0)。

參數(shù)

w 視圖當(dāng)前寬度

h 視圖當(dāng)前高度

oldw 視圖改變前的寬度

oldh 視圖改變前的高度

本文鏈接:http://my.oschina.net/u/1014842/blog/299050

【編輯推薦】

  1. 深度定制Android崛起 谷歌遭遇變種危機
  2. Android中的Context的作用
  3. 七個讓你意想不到的Android系統(tǒng)應(yīng)用領(lǐng)域
  4. 主流Android設(shè)備分辨率簡報

【責(zé)任編輯:chenqingxiang TEL:(010)68476606】

責(zé)任編輯:chenqingxiang 來源: oschina
相關(guān)推薦

2021-07-15 06:43:11

Bash調(diào)試腳本

2013-09-13 14:08:01

2021-04-23 09:50:41

topLinux命令

2020-10-13 18:22:58

DevOps工具開發(fā)

2020-05-06 10:10:51

Python代碼鏈?zhǔn)秸{(diào)用

2009-11-17 12:47:05

PHP配置

2022-08-29 15:02:53

遠(yuǎn)程桌面

2021-08-01 21:38:07

網(wǎng)頁點燈網(wǎng)關(guān)

2020-10-29 08:28:42

Java NIO異步非阻塞

2018-11-28 11:20:53

Python函數(shù)式編程編程語言

2021-05-28 07:38:20

內(nèi)存溢出場景

2021-05-17 20:13:50

數(shù)倉操作型數(shù)據(jù)庫

2019-07-18 16:32:06

Python函數(shù)數(shù)據(jù)

2021-10-12 09:24:02

Java線程池源碼

2018-02-01 14:15:00

Python函數(shù)

2012-06-28 10:26:51

Silverlight

2020-03-17 07:41:50

ApacheKafka系統(tǒng)

2019-05-08 14:02:52

MySQL索引查詢優(yōu)化數(shù)據(jù)庫

2023-12-25 14:50:39

Python迭代器

2014-04-17 11:34:23

青云青云QingCloudIaaS
點贊
收藏

51CTO技術(shù)棧公眾號