FileDocCategorySizeDatePackage
ViewFlipper.javaAPI DocAndroid 5.1 API7647Thu Mar 12 22:22:10 GMT 2015android.widget

ViewFlipper

public class ViewFlipper extends ViewAnimator
Simple {@link ViewAnimator} that will animate between two or more views that have been added to it. Only one child is shown at a time. If requested, can automatically flip between each child at a regular interval.
attr
ref android.R.styleable#ViewFlipper_flipInterval
attr
ref android.R.styleable#ViewFlipper_autoStart

Fields Summary
private static final String
TAG
private static final boolean
LOGD
private static final int
DEFAULT_INTERVAL
private int
mFlipInterval
private boolean
mAutoStart
private boolean
mRunning
private boolean
mStarted
private boolean
mVisible
private boolean
mUserPresent
private final android.content.BroadcastReceiver
mReceiver
private final int
FLIP_MSG
private final Handler
mHandler
Constructors Summary
public ViewFlipper(android.content.Context context)


       
        super(context);
    
public ViewFlipper(android.content.Context context, android.util.AttributeSet attrs)

        super(context, attrs);

        TypedArray a = context.obtainStyledAttributes(attrs,
                com.android.internal.R.styleable.ViewFlipper);
        mFlipInterval = a.getInt(
                com.android.internal.R.styleable.ViewFlipper_flipInterval, DEFAULT_INTERVAL);
        mAutoStart = a.getBoolean(
                com.android.internal.R.styleable.ViewFlipper_autoStart, false);
        a.recycle();
    
Methods Summary
public booleanisAutoStart()
Returns true if this view automatically calls {@link #startFlipping()} when it becomes attached to a window.

        return mAutoStart;
    
public booleanisFlipping()
Returns true if the child views are flipping.

        return mStarted;
    
protected voidonAttachedToWindow()


    
       
        super.onAttachedToWindow();

        // Listen for broadcasts related to user-presence
        final IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        filter.addAction(Intent.ACTION_USER_PRESENT);

        // OK, this is gross but needed. This class is supported by the
        // remote views machanism and as a part of that the remote views
        // can be inflated by a context for another user without the app
        // having interact users permission - just for loading resources.
        // For exmaple, when adding widgets from a user profile to the
        // home screen. Therefore, we register the receiver as the current
        // user not the one the context is for.
        getContext().registerReceiverAsUser(mReceiver, android.os.Process.myUserHandle(),
                filter, null, mHandler);

        if (mAutoStart) {
            // Automatically start when requested
            startFlipping();
        }
    
protected voidonDetachedFromWindow()

        super.onDetachedFromWindow();
        mVisible = false;

        getContext().unregisterReceiver(mReceiver);
        updateRunning();
    
public voidonInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent event)

        super.onInitializeAccessibilityEvent(event);
        event.setClassName(ViewFlipper.class.getName());
    
public voidonInitializeAccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo info)

        super.onInitializeAccessibilityNodeInfo(info);
        info.setClassName(ViewFlipper.class.getName());
    
protected voidonWindowVisibilityChanged(int visibility)

        super.onWindowVisibilityChanged(visibility);
        mVisible = visibility == VISIBLE;
        updateRunning(false);
    
public voidsetAutoStart(boolean autoStart)
Set if this view automatically calls {@link #startFlipping()} when it becomes attached to a window.

        mAutoStart = autoStart;
    
public voidsetFlipInterval(int milliseconds)
How long to wait before flipping to the next view

param
milliseconds time in milliseconds

        mFlipInterval = milliseconds;
    
public voidstartFlipping()
Start a timer to cycle through child views

        mStarted = true;
        updateRunning();
    
public voidstopFlipping()
No more flips

        mStarted = false;
        updateRunning();
    
private voidupdateRunning()
Internal method to start or stop dispatching flip {@link Message} based on {@link #mRunning} and {@link #mVisible} state.

        updateRunning(true);
    
private voidupdateRunning(boolean flipNow)
Internal method to start or stop dispatching flip {@link Message} based on {@link #mRunning} and {@link #mVisible} state.

param
flipNow Determines whether or not to execute the animation now, in addition to queuing future flips. If omitted, defaults to true.

        boolean running = mVisible && mStarted && mUserPresent;
        if (running != mRunning) {
            if (running) {
                showOnly(mWhichChild, flipNow);
                Message msg = mHandler.obtainMessage(FLIP_MSG);
                mHandler.sendMessageDelayed(msg, mFlipInterval);
            } else {
                mHandler.removeMessages(FLIP_MSG);
            }
            mRunning = running;
        }
        if (LOGD) {
            Log.d(TAG, "updateRunning() mVisible=" + mVisible + ", mStarted=" + mStarted
                    + ", mUserPresent=" + mUserPresent + ", mRunning=" + mRunning);
        }