仿zaker最新版本引導界面的視圖聯動效果(修改viewpager實現)

gy774474 8年前發布 | 5K 次閱讀 Android開發 移動開發

新版本的zaker更換了全新的UI,讓我一亮的是他第一次啟動時引導界面的效果:

如上圖,畫面里有一個白色的手機模型,模型中間有zaker app的界面縮略圖,手機模型下面是兩行文字。按照常用的做法,滑動將會翻頁,但是和其他應用不同的事,zaker這個界面的翻頁手機模型一直是固定的,隨著屏幕滑動的只有手機模型中的縮略圖以及下面的兩行文字。

手機模型中的圖像會隨著屏幕滑動而滑動,而且當整個界面翻過一頁時,手機中的畫面也剛好翻過一頁。總之,不管怎么滑動外面文字和手機內部的畫面是同步的。

這是如何實現的呢,琢磨了很久,終于摸索出一點道道來(稍微有點經驗的都應該聯想到viewpager吧)。

先說說我的實現思路。

1.首先你得要有一個這樣的ViewPager:當自己滑動的時候,能讓與自己關聯的viewpager也跟著動,且是同步的,這是關鍵所在,也是最困難的地方。

2.然后你還得有一個屏蔽觸摸事件的布局控件,很簡單,自定義一個就是。為什么需要這玩意兒呢,后面再說。

3.最后你還得要一個像zaker那樣的手機框框,這個框作為手機內部視圖的背景。別得意沒那么簡單,這個背景必須是精心制作的.9圖片才行,不然背景放上去根本不能達到上面的效果。.9圖片不僅能解決拉伸的問題,還能指定內容區域,這是我們使用.9的原因。

上面的材料準備好之后,就開始想如何使用它們了。

上述材料1中的viewpager似乎已經能滿足我們的需求了,其實不是,外面的viewpager帶動手機里面的viewpager滑動,那么外面的這個必須是滿屏幕的,稱之為TouchViewPager吧,由他來處理所有的觸摸事件,手機內部的viewpager僅僅是跟著做運動,所以得屏蔽手機內部接受觸摸的事件,于是需要材料2。TouchViewPager是滿屏幕的那么他的整個背景應該是透明,這樣才不會遮住手機中的viewpager。

如何實現一個能聯動的ViewPager呢(準確的說是兩個一起)?這需要自定義ViewPager,是繼承ViewPager嗎?也許可以但是很難,繼承意味著不能更改私有方法,于是根據網上有人通過完全重寫整個ViewPager得到垂直滑動ViewPager的先例,我覺得重寫整個ViewPager得到自己的聯動pager也是可能的。

將Supportv 4中的ViewPager和PagerAdapter都拷貝出來放在自己的項目中,使用的時候就不要import Supportv 4中的了。

直接放到項目中后你會看到這個ViewPager有好多錯誤,肯定的,因為原本依賴的一些東西不見了,其實很多都是可以不要的,發揮你的想象力刪除該刪的代碼,直到沒有錯誤為止(其中將原本import的Supportv 4中的PagerAdapter改為剛剛拷貝過來的這個),如果你不想自己搞本文末尾的demo中會有一個已經剔除干凈的ViewPager。

具體實現請看 如何實現兩個ViewPager的聯動 一文。


 

 

 

 

 本文由用戶 gy774474 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!