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