[Android] TextSwitcher,textswitcher

來源:互聯網
上載者:User

[Android] TextSwitcher,textswitcher

在上文當中,我們描述了如何使用TextSwitcher控制項。本文將通過分析Android Framework層源碼來闡釋它是如何?文本的平滑切換的的。

TextSwitcher的類繼承關係


有此繼承結構我們可以知道,TextSwitcher:
- 繼承自FrameLayout,所以其子View層疊地放置著
- 繼承自ViewAnimator,所以其持有兩個Animation對象,用於呈現淡出、漸入等動畫效果。

setFactory做了什麼

閱讀ViewSwitcher源碼,我們可以發現在setFactory方法中,會構造2個我們在makeView回調中產生的視圖。

    public void setFactory(ViewFactory factory) {        mFactory = factory;        // 構建一個子View        obtainView();        // 再構建一個子View        obtainView();    }

然後,又將這2個View對象加入到了FrameLayout中。

setInAnimationsetOutAnimation做了什麼

就是設定ViewAnimator所持有的Animation對象。
android.view.animation.Animation

    public void setInAnimation(Animation inAnimation) {        mInAnimation = inAnimation;    }
setText做了什麼
    public void setText(CharSequence text) {        final TextView t = (TextView) getNextView();        t.setText(text);        // 顯示下一個View        showNext();    }

最終調用了android.widget.ViewAnimatorshowOnly方法。

    void showOnly(int childIndex, boolean animate) {        final int count = getChildCount();        for (int i = 0; i < count; i++) {            final View child = getChildAt(i);            if (i == childIndex) {                if (animate && mInAnimation != null) {                    // 讓新TextView示範進入動畫                    child.startAnimation(mInAnimation);                }                child.setVisibility(View.VISIBLE);                mFirstTime = false;            } else {                if (animate && mOutAnimation != null && child.getVisibility() == View.VISIBLE) {                    // 讓舊TextView示範淡齣動畫                    child.startAnimation(mOutAnimation);                } else if (child.getAnimation() == mInAnimation)                    child.clearAnimation();                child.setVisibility(View.GONE);            }        }    }

從而實現了文本視圖的平滑切換。

註:
1. 相關代碼在 GitHub
2. 配套視頻在 優酷

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.