Android中实现Launcher功能之四---滑屏初探 scrollTo 以及 scrollBy方法使用说明
?本文原創 ,轉載必須注明出處?:http://blog.csdn.net/qinjuning
???????????????????????????????????
?
????? ? ?今天給大家介紹下Android中滑屏功能的一個基本實現過程以及原理初探,最后給大家重點講解View視圖中scrollTo 與
?? scrollBy這兩個函數的區別 。
??
????????首先 ,我們必須明白在Android View視圖是沒有邊界的,Canvas是沒有邊界的,只不過我們通過繪制特定的View時對
???Canvas對象進行了一定的操作,例如 : translate(平移)、clipRect(剪切)等,以便達到我們的對該Canvas對象繪制的要求 ,
???我們可以將這種無邊界的視圖稱為“視圖坐標”-----它不受物理屏幕限制。通常我們所理解的一個Layout布局文件只是該視
???圖的顯示區域,超過了這個顯示區域將不能顯示到父視圖的區域中 ,對應的,我們可以將這種有邊界的視圖稱為“布局坐標”
????------ 父視圖給子視圖分配的布局(layout)大小。而且, 一個視圖的在屏幕的起始坐標位于視圖坐標起始處,如下圖所示。
?
???????? 這么來說吧 ,世界本是無邊無界的,可是我們的眼睛我們的心約束了我們所看到的“世界” 。
?
??? ?? 如下所示:
?????????????
??????????????
????????????? 黑色框框表示該子視圖的布局坐標, 褐色框框表示該子視圖的視圖坐標--該坐標是無限的,超過了父視圖給子視圖
?????? 規定的區域后,不再顯示該超出內容。
?
??? ?? ? ?那么下面的問題就是:如何將我們的視圖的任意坐標能顯示到該視圖的中心坐標上呢? 由于該布局位置是只能顯示特定的
? 一塊視圖內容 ,因此我們需要通過scrollTo()或者scrollBy()方法將我們期望的視圖“滾動”至布局坐標上。
?
????? 在View.java中提供了了如下兩個變量以及相應的屬性方法去讀取滾動值 ,如下: View.java類中???
[java]?view plaincopyprint?
?
??????注意,所謂的“by which the content of this view is scrolled”表示該偏移量只針對于該View中onDraw()方法里的
??具體內容實現,而不針對繪制背景圖片等 。具體原因可參考<Android中View繪制流程以及invalidate()等相關方法分析>
?
?????提示:下文中提到的當前視圖內容是在繪制在布局坐標處的內容。
?
?????public void?scrollTo(int x, int y)
????????????? 說明:在當前視圖內容偏移至(x , y)坐標處,即顯示(可視)區域位于(x , y)坐標處。
??????? 方法原型為: View.java類中
[java]?view plaincopyprint??
?????public void?scrollBy(int x, int y)? ??
??????????? 說明:在當前視圖內容繼續偏移(x , y)個單位,顯示(可視)區域也跟著偏移(x,y)個單位。
??????? 方法原型為: View.java類中
[java]?view plaincopyprint?
????????
?????????????
?????? 第一個小Demo非常簡單 ,大家重點理解與掌握scrollTo() 與 scrollBy()函數的用法和區別。
?
????? ?第二個小Demo則有了Launcher的模樣,能夠左右切換屏幕 。實現功能如下: 采用了一個自定義ViewGroup,該ViewGroup
?? 對象包含了3個LinearLayout子視圖,并且以一定的布局坐標(由layout()方法指定)顯示在ViewGroup上。 接下來,即可調用該
???ViewGroup對象的scrollTo或者scrollBy()方法切換指定視圖內容了,即切換屏幕。 呵呵 ,挺好玩的吧 。
?
?????? 如果對View繪制流程不懂的,可以參考我的這篇博客<Android中View繪制流程以及invalidate()等相關方法分析> 。
?????? 截圖如下:
????????????????????????????
?????? 自定義ViewGroup如下:
?
[java]?view plaincopyprint?
?
????????? PS? :大家可以分別給這幾個LinearLayout試著添加幾個子View,例如TextView, Button等。
?
????? ? 至于Launcher上滑屏功能的實現,我嘗試著去掌握,可能天資愚鈍吧,對Scoller類很是感冒,現今還沒有掌握好,不過在此
?? 給大家推薦幾個不錯的學習資源 。?以后有需要的話,還是采用拿來主義吧。 囧
?
??????? 1、 Scoller類介紹:android 中文 api (64) —— Scroller
??????? 2、相關資源匯總:http://blog.csdn.net/dellheng/article/details/7164275?
??????? 3,launcher修改--左右滑動屏幕切換源碼追蹤
?
???????? 示例源代碼位于:?http://download.csdn.net/detail/qinjuning/4054840
?
?
?
?
? ? ? ? ??? 補充(收回上面一段話,- -):關于如何實現觸摸滑屏---- 仿Launcher滑屏以及Scoller類的使用,請參閱我的
? ?另外一篇博文:?《?Android中滑屏實現----手把手教你如何實現觸摸滑屏以及Scroller類詳解》
轉載于:https://www.cnblogs.com/MMLoveMeMM/articles/4212240.html
總結
以上是生活随笔為你收集整理的Android中实现Launcher功能之四---滑屏初探 scrollTo 以及 scrollBy方法使用说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决 wget 使用 https 下载报
- 下一篇: android sina oauth2.