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