diff options
Diffstat (limited to 'core/java/android/widget/ViewSwitcher.java')
-rw-r--r-- | core/java/android/widget/ViewSwitcher.java | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/core/java/android/widget/ViewSwitcher.java b/core/java/android/widget/ViewSwitcher.java new file mode 100644 index 0000000..f4f23a8 --- /dev/null +++ b/core/java/android/widget/ViewSwitcher.java @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.widget; + +import java.util.Map; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; + +/** + * {@link ViewAnimator} that switches between two views, and has a factory + * from which these views are created. You can either use the factory to + * create the views, or add them yourself. A ViewSwitcher can only have two + * child views, of which only one is shown at a time. + */ +public class ViewSwitcher extends ViewAnimator { + /** + * The factory used to create the two children. + */ + ViewFactory mFactory; + + /** + * Creates a new empty ViewSwitcher. + * + * @param context the application's environment + */ + public ViewSwitcher(Context context) { + super(context); + } + + /** + * Creates a new empty ViewSwitcher for the given context and with the + * specified set attributes. + * + * @param context the application environment + * @param attrs a collection of attributes + */ + public ViewSwitcher(Context context, AttributeSet attrs) { + super(context, attrs); + } + + /** + * {@inheritDoc} + * + * @throws IllegalStateException if this switcher already contains two children + */ + @Override + public void addView(View child, int index, ViewGroup.LayoutParams params) { + if (getChildCount() >= 2) { + throw new IllegalStateException("Can't add more than 2 views to a ViewSwitcher"); + } + super.addView(child, index, params); + } + + /** + * Returns the next view to be displayed. + * + * @return the view that will be displayed after the next views flip. + */ + public View getNextView() { + int which = mWhichChild == 0 ? 1 : 0; + return getChildAt(which); + } + + private View obtainView() { + View child = mFactory.makeView(); + LayoutParams lp = (LayoutParams) child.getLayoutParams(); + if (lp == null) { + lp = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); + } + addView(child, lp); + return child; + } + + /** + * Sets the factory used to create the two views between which the + * ViewSwitcher will flip. Instead of using a factory, you can call + * {@link #addView(android.view.View, int, android.view.ViewGroup.LayoutParams)} + * twice. + * + * @param factory the view factory used to generate the switcher's content + */ + public void setFactory(ViewFactory factory) { + mFactory = factory; + obtainView(); + obtainView(); + } + + /** + * Reset the ViewSwitcher to hide all of the existing views and to make it + * think that the first time animation has not yet played. + */ + public void reset() { + mFirstTime = true; + View v; + v = getChildAt(0); + if (v != null) { + v.setVisibility(View.GONE); + } + v = getChildAt(1); + if (v != null) { + v.setVisibility(View.GONE); + } + } + + /** + * Creates views in a ViewSwitcher. + */ + public interface ViewFactory { + /** + * Creates a new {@link android.view.View} to be added in a + * {@link android.widget.ViewSwitcher}. + * + * @return a {@link android.view.View} + */ + View makeView(); + } +} + |