若是本文幫助到你,本人不勝榮幸,若是浪費了你的時間,本人深感抱歉。 但願用最簡單的大白話來幫助那些像我同樣的人。若是有什麼錯誤,請必定指出,以避免誤導你們、也誤導我。 本文來自:www.jianshu.com/users/320f9… 感謝您的關注。git
前段時間偶然看到一個使用 ViewFlipper 實現圖片輪播的。 我認可,以前我是沒有聽過 ViewFlipper 這個東西的。那麼我腦海中就出現了一個問題:ViewFlipper 是個什麼東西?爲何繼承它能實現圖片的輪播。而後有了以後的探索,咱們一塊兒來看看。github
在 studio 中 F4 查看層級關係,通過一番尋找以後有了下圖。 呦呵,看到了熟人。ViewFlipper 我沒見過,可是我見過 TextSwitcher 和 ImageSwitcher 啊,他兩都是內容改變時有個動畫的效果。ide
首先看上圖最右邊的層級關係,經過 ViewFlipper 找到了 TextSwitcher 和ImageSwitcher 。他們有一個共同的父類 ViewAnimator ,也就是說他們確定是有關聯的,並且應該是很相近。動畫
既然 TextSwitcher 和 ImageSwitcher ,咱們認識,那麼咱們就小小的分析一下這兩個類。他兩提供的功能基本相同,只不過一個針對文字,一個對圖片。這兩個類自己也是很是簡單,提供的方法在左邊的目錄能夠看到,還有一些在父類裏。this
由於類自己比較簡單,因此類裏面的代碼也沒有多少。 咱們看中間的代碼窗口,除了構造器剩餘的方法一目瞭然。 能夠發現,最終都是調用了 showNext() 顯示切換後的內容,而 showNext() 是由他們的共同父類 ViewAnimator 執行的,而 ViewAnimator 自己就是一個管理動畫的類。spa
也就是說,咱們今天的主角 ViewFlipper 最終應該也是調用 showNext() 來執行動畫的。 那 ViewFlipper 跟他們到底有什麼區別呢? 咱們來看下面的圖,對 ViewFlipper 的分析。code
這個咱們以前已經看過了。cdn
能夠看到最左邊的目錄明顯比上面要多不少東西(其實上面兩個是有個父類幫他們分擔了,可是這個功能仍是比他多(^__^))。blog
那最根本的區別究竟是什麼呢? 看中間的內容,咱們就發現,在這個類當中是有個 Handler Message 存在的。也就是說咱們能夠設置定時播放動畫,也正是基於此,該類才比上面多了一些功能。 開始、結束動畫,是否自動播放,間隔時間,都是上面的所不具有的。繼承
這樣一波看下來,咱們大概就知道了 ViewFlipper 爲何能用來實現輪播了。
那 ViewFlipper 到底該怎麼使用呢?
嗯....... 仍是直接上代碼吧,註釋很詳細一目瞭然。
private void setViewFlipper() {
mViewFlipper = (ViewFlipper) findViewById(R.id.flipper);
//添加要滾動的View
mViewFlipper.addView(getImageView(R.drawable.abcde_a));
mViewFlipper.addView(getImageView(R.drawable.abcde_b));
mViewFlipper.addView(getImageView(R.drawable.abcde_c));
//設置開始和結束動畫
mViewFlipper.setInAnimation(this, R.anim.push_up_in);
mViewFlipper.setOutAnimation(this, R.anim.push_up_out);
//設置間隔時間
mViewFlipper.setFlipInterval(3000);
//動畫的監聽
mViewFlipper.getInAnimation().setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
//動畫開始時
}
@Override
public void onAnimationEnd(Animation animation) {
//動畫結束時
}
@Override
public void onAnimationRepeat(Animation animation) {
//重複
}
});
//開始輪播
mViewFlipper.startFlipping();
}
private ImageView getImageView(int res) {
ImageView imageView = new ImageView(this);
imageView.setBackgroundResource(res);
return imageView;
}
複製代碼
有了 setInAnimation() 、 setOutAnimation(),這兩個方法的存在,咱們就能夠設置各類各樣的本身想要的動畫效果,而其他提供的方法,更是讓咱們很是方便的控制動畫。有沒有以爲很不錯呢?
你有沒有什麼好的想法? 能夠本身去動手實踐看看。
setInAnimation 設置View進入屏幕時候使用的動畫
setOutAnimation 設置View退出屏幕時候使用的動畫
showPrevious 顯示ViewFlipper裏面的上一個View
showNext 顯示ViewFlipper裏面的下一個View
setFlipInterval 設置View之間切換的時間間隔
startFlipping 使用setFlipInterval方法設置的時間間隔來開始切換全部的View,切換會循環進行
stopFlipping 中止View切換
isFlipping 用來判斷View切換是否正在進行
setDisplayedChild 切換到指定子View
複製代碼
以前在羣裏,聽到有人問:已經有 ViewPager 了,ViewFlipper還有沒有存在的必要? 看完本篇以後,還有沒有這樣的疑問? ViewFlipper 是爲了動畫而生的,可是 ViewPager 呢?
好了,本篇就到這裏。 O(∩_∩)O