Hacks動畫篇-Hack2 使用ViewFlipper實現公告輪播

ViewFlipper

作者:李旺成

時間:2016年5月10日


UC 小說書架公告動畫

記得 UC 瀏覽器 10.9.9 往前版本的小說書架標題欄下面有一個公告欄,在這個公告欄里面會動態展示當前的公告。

剛看到的時候覺得很不錯,于是想自己動手實現一個,當時的思路是使用豎向的 ViewPager,因為這和 ViewPager 的輪播太相似了。先來看看效果:

UC瀏覽器小說書架公告動畫

Tips:”UC瀏覽器改版后這個動畫已經沒有了,如果你感興趣的話可以去下載歷史版本看看,這個示例里面用的是 UCBrowser_V10.8.5.689

雖然,使用豎向的 ViewPager 可以實現上面的動畫效果,但是,總感覺哪里不對,是不是有更簡單的辦法?直到某天,在玩 APIDemos 的時候突然發現里面有個一樣的動畫效果:

APIDemos中的Push動畫

在 APIDemos 源碼里面定位了一下,原來這里使用的是 ViewFlipper。

ViewFlipper 簡介

前面介紹了 ViewSwitcher 的兩個子類 TextSwitcher 和 ImageSwitcher,可以用來實現 Text/Image 的切換效果。而 ViewFlipper 可以用來做多個 View 之間的切換效果,可以一次指定也可以每次切換的時候都指定單獨的動畫效果。

先看官方介紹:

ViewFlipper類

從繼承結構看,這是個容器(FrameLayout 又出現了),并且與 ViewSwitcher 一樣,都是繼承自 ViewAnimator。看下它提供的屬性,就兩個,而且見名知義,這里就不解釋了。

再看看 ViewFlipper 提供的方法:

ViewFlipper的方法

方法不多,也是可以見名知義的,直接調用看效果吧!

ViewFlipper 簡單使用

我們想實現 UC 瀏覽器小說書架里面的公告切換效果,先看效果:

ViewFlipper動畫演示

1、在布局中定義

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="10dip">
    <ViewFlipper
        android:id="@+id/flipper"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dip"
        android:flipInterval="2000">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:text="@string/animation_2_text_1"
            android:textSize="26sp" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:text="@string/animation_2_text_2"
            android:textSize="26sp" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:text="@string/animation_2_text_3"
            android:textSize="26sp" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:text="@string/animation_2_text_4"
            android:textSize="26sp" />
    </ViewFlipper>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dip"
        android:text="@string/animation_2_instructions" />
    <!-- 用來切換不同的動畫 -->
    <Spinner
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

ViewFlipper 繼承了 FrameLayout(ViewFlipper 的直接父類 ViewAnimator 繼承自 Framelayout),所以直接把它當作 FrameLayout 使用即可。

2、開始 Flipping
上面的布局中已經為 ViewFlipper 填充了內容,下面直接啟動 Flipping 即可。

mFlipper = ((ViewFlipper) this.findViewById(R.id.flipper));
mFlipper.startFlipping();

3、設置切換動畫
自己去看看上面直接啟動 Flipping 之后的動畫效果,有點”搓“有沒有,來我們模仿 UC 的公告效果自定義一個,先看用到的動畫文件:
push_up_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromYDelta="100%p"
        android:toYDelta="0" />
    <alpha
        android:duration="300"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>

push_up_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromYDelta="0"
        android:toYDelta="-100%p" />
    <alpha
        android:duration="300"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
</set>

為 ViewFlipper 設置動畫

mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
        R.anim.push_up_in));
mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
        R.anim.push_up_out));

看到沒,是不是很像了。

4、其他動畫
這些動畫是直接從 APIDemos 源碼里面拷出來的,大家可以點擊示例里面的 Spinner 來切換不同的動畫看看效果,這里就不偏題了。

小結

ViewFlipper 的使用很簡單,步驟如下:

  1. 在布局中添加 ViewFlipper
    如果是靜態數據,那么建議直接在布局中就添加到 ViewFlipper 中
  2. 設置切換動畫
    setInAnimation()
    setOutAnimation()
  3. 啟動 Flipping
    startFlipping()
  4. 往 FlippingView 中動態添加 View
    創建好 View 后,調用 ViewFlipper 的 addView() 方法添加 View 即可

項目地址

AndroidHacks合集
動畫篇

項目示例代碼:
ViewFlipperActivity.java
activity_viewflipper.xml
push_up_out.xml
push_up_in.xml

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,517評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,087評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,521評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,493評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,207評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,603評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,624評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,813評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,364評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,110評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,305評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,874評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,532評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,953評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,209評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,033評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,268評論 2 375

推薦閱讀更多精彩內容