Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> [Android] TextSwitcher -- 怎麼做到的

[Android] TextSwitcher -- 怎麼做到的

編輯:關於Android編程

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


TextSwitcher的類繼承關系

TextSwitcher的類繼承關系
有此繼承結構我們可以知道,TextSwitcher:
- 繼承自FrameLayout<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPqOsy/nS1Mbk19NWaWV3suO1/rXYt8XWw9fFPGJyIC8+DQotILzMs9DX1DxzdHJvbmc+Vmlld0FuaW1hdG9yPC9zdHJvbmc+o6zL+dLUxuSz1tPQwb249jxzdHJvbmc+QW5pbWF0aW9uPC9zdHJvbmc+ttTP86Os08PT2rPKz9a1rbP2oaK9pcjrtci2r7ut0Ke5+6GjPC9wPg0KPGhyIC8+DQo8aDMgaWQ9"setfactory做了什麼">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. 配套視頻在 優酷

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved