package pl.droidsonroids.gif; import android.graphics.drawable.Drawable; import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.NonNull; import android.view.View; class GifViewSavedState extends View.BaseSavedState { final long[][] mStates; GifViewSavedState(Parcelable superState, Drawable... drawables) { super(superState); mStates = new long[drawables.length][]; for (int i = 0; i < drawables.length; i++) { Drawable drawable = drawables[i]; if (drawable instanceof GifDrawable) { mStates[i] = ((GifDrawable) drawable).mNativeInfoHandle.getSavedState(); } else { mStates[i] = null; } } } private GifViewSavedState(Parcel in) { super(in); mStates = new long[in.readInt()][]; for (int i = 0; i < mStates.length; i++) mStates[i] = in.createLongArray(); } GifViewSavedState(Parcelable superState, long[] savedState) { super(superState); mStates = new long[1][]; mStates[0] = savedState; } @Override public void writeToParcel(@NonNull Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeInt(mStates.length); for (long[] mState : mStates) dest.writeLongArray(mState); } public static final Creator<GifViewSavedState> CREATOR = new Creator<GifViewSavedState>() { public GifViewSavedState createFromParcel(Parcel in) { return new GifViewSavedState(in); } public GifViewSavedState[] newArray(int size) { return new GifViewSavedState[size]; } }; void restoreState(Drawable drawable, int i) { if (mStates[i] != null && drawable instanceof GifDrawable) { final GifDrawable gifDrawable = (GifDrawable) drawable; gifDrawable.startAnimation(gifDrawable.mNativeInfoHandle.restoreSavedState(mStates[i], gifDrawable.mBuffer)); } } }