19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.widget;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.TypedArray;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ViewGroup;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.animation.Animation;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.animation.AnimationUtils;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Base class for a {@link FrameLayout} container that will perform animations
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * when switching between its views.
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#ViewAnimator_inAnimation
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#ViewAnimator_outAnimation
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ViewAnimator extends FrameLayout {
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int mWhichChild = 0;
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    boolean mFirstTime = true;
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    boolean mAnimateFirstTime = true;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Animation mInAnimation;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Animation mOutAnimation;
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ViewAnimator(Context context) {
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super(context);
461162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey        initViewAnimator(context, null);
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ViewAnimator(Context context, AttributeSet attrs) {
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super(context, attrs);
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.ViewAnimator);
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int resource = a.getResourceId(com.android.internal.R.styleable.ViewAnimator_inAnimation, 0);
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (resource > 0) {
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            setInAnimation(context, resource);
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        resource = a.getResourceId(com.android.internal.R.styleable.ViewAnimator_outAnimation, 0);
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (resource > 0) {
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            setOutAnimation(context, resource);
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        a.recycle();
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
641162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey        initViewAnimator(context, attrs);
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
671162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey    /**
681162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey     * Initialize this {@link ViewAnimator}, possibly setting
691162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey     * {@link #setMeasureAllChildren(boolean)} based on {@link FrameLayout} flags.
701162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey     */
711162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey    private void initViewAnimator(Context context, AttributeSet attrs) {
721162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey        if (attrs == null) {
731162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey            // For compatibility, always measure children when undefined.
741162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey            mMeasureAllChildren = true;
751162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey            return;
761162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey        }
771162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey
781162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey        // For compatibility, default to measure children, but allow XML
791162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey        // attribute to override.
801162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey        final TypedArray a = context.obtainStyledAttributes(attrs,
811162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey                com.android.internal.R.styleable.FrameLayout);
821162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey        final boolean measureAllChildren = a.getBoolean(
831162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey                com.android.internal.R.styleable.FrameLayout_measureAllChildren, true);
841162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey        setMeasureAllChildren(measureAllChildren);
851162fd77a8ff8467c96204c00bcaf941aef6aa85Jeff Sharkey        a.recycle();
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets which child view will be displayed.
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param whichChild the index of the child view to display
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setDisplayedChild(int whichChild) {
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mWhichChild = whichChild;
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (whichChild >= getChildCount()) {
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mWhichChild = 0;
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (whichChild < 0) {
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mWhichChild = getChildCount() - 1;
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean hasFocus = getFocusedChild() != null;
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // This will clear old focus if we had it
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        showOnly(mWhichChild);
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (hasFocus) {
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // Try to retake focus if we had it
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            requestFocus(FOCUS_FORWARD);
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the index of the currently displayed child view.
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getDisplayedChild() {
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mWhichChild;
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Manually shows the next child.
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void showNext() {
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setDisplayedChild(mWhichChild + 1);
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Manually shows the previous child.
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void showPrevious() {
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setDisplayedChild(mWhichChild - 1);
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Shows only the specified child. The other displays Views exit the screen
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with the {@link #getOutAnimation() out animation} and the specified child
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * enters the screen with the {@link #getInAnimation() in animation}.
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param childIndex The index of the child to be shown.
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void showOnly(int childIndex) {
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final int count = getChildCount();
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0; i < count; i++) {
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            final View child = getChildAt(i);
1418ca2f47e0d8ec526d70c1133c9aba966543b11ffNoraBora            final boolean checkForFirst = (!mFirstTime || mAnimateFirstTime);
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (i == childIndex) {
1438ca2f47e0d8ec526d70c1133c9aba966543b11ffNoraBora                if (checkForFirst && mInAnimation != null) {
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    child.startAnimation(mInAnimation);
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                child.setVisibility(View.VISIBLE);
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mFirstTime = false;
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
1498ca2f47e0d8ec526d70c1133c9aba966543b11ffNoraBora                if (checkForFirst && mOutAnimation != null && child.getVisibility() == View.VISIBLE) {
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    child.startAnimation(mOutAnimation);
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                } else if (child.getAnimation() == mInAnimation)
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    child.clearAnimation();
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                child.setVisibility(View.GONE);
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void addView(View child, int index, ViewGroup.LayoutParams params) {
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.addView(child, index, params);
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (getChildCount() == 1) {
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            child.setVisibility(View.VISIBLE);
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            child.setVisibility(View.GONE);
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void removeAllViews() {
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.removeAllViews();
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mWhichChild = 0;
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mFirstTime = true;
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void removeView(View view) {
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final int index = indexOfChild(view);
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (index >= 0) {
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            removeViewAt(index);
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void removeViewAt(int index) {
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.removeViewAt(index);
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final int childCount = getChildCount();
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (childCount == 0) {
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mWhichChild = 0;
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mFirstTime = true;
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (mWhichChild >= childCount) {
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // Displayed is above child count, so float down to top of stack
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            setDisplayedChild(childCount - 1);
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (mWhichChild == index) {
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // Displayed was removed, so show the new child living in its place
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            setDisplayedChild(mWhichChild);
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void removeViewInLayout(View view) {
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        removeView(view);
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void removeViews(int start, int count) {
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.removeViews(start, count);
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (getChildCount() == 0) {
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mWhichChild = 0;
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mFirstTime = true;
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else if (mWhichChild >= start && mWhichChild < start + count) {
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // Try showing new displayed child, wrapping if needed
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            setDisplayedChild(mWhichChild);
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void removeViewsInLayout(int start, int count) {
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        removeViews(start, count);
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the View corresponding to the currently displayed child.
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The View currently displayed.
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getDisplayedChild()
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public View getCurrentView() {
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getChildAt(mWhichChild);
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the current animation used to animate a View that enters the screen.
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return An Animation or null if none is set.
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #setInAnimation(android.view.animation.Animation)
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #setInAnimation(android.content.Context, int)
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Animation getInAnimation() {
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mInAnimation;
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Specifies the animation used to animate a View that enters the screen.
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param inAnimation The animation started when a View enters the screen.
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getInAnimation()
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #setInAnimation(android.content.Context, int)
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setInAnimation(Animation inAnimation) {
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mInAnimation = inAnimation;
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the current animation used to animate a View that exits the screen.
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return An Animation or null if none is set.
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #setOutAnimation(android.view.animation.Animation)
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #setOutAnimation(android.content.Context, int)
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Animation getOutAnimation() {
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mOutAnimation;
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Specifies the animation used to animate a View that exit the screen.
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param outAnimation The animation started when a View exit the screen.
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getOutAnimation()
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #setOutAnimation(android.content.Context, int)
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setOutAnimation(Animation outAnimation) {
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mOutAnimation = outAnimation;
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Specifies the animation used to animate a View that enters the screen.
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param context The application's environment.
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resourceID The resource id of the animation.
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getInAnimation()
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #setInAnimation(android.view.animation.Animation)
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setInAnimation(Context context, int resourceID) {
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setInAnimation(AnimationUtils.loadAnimation(context, resourceID));
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Specifies the animation used to animate a View that exit the screen.
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param context The application's environment.
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param resourceID The resource id of the animation.
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #getOutAnimation()
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see #setOutAnimation(android.view.animation.Animation)
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setOutAnimation(Context context, int resourceID) {
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setOutAnimation(AnimationUtils.loadAnimation(context, resourceID));
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Indicates whether the current View should be animated the first time
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the ViewAnimation is displayed.
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param animate True to animate the current View the first time it is displayed,
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *                false otherwise.
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setAnimateFirstView(boolean animate) {
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mAnimateFirstTime = animate;
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getBaseline() {
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return (getCurrentView() != null) ? getCurrentView().getBaseline() : super.getBaseline();
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
319