AnimationSet.java revision c9bcebe969fd6fac40bcef4f23dd8fe99290a90b
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.view.animation; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.TypedArray; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.RectF; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.ArrayList; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.List; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Represents a group of Animations that should be played together. 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The transformation of each individual animation are composed 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * together into a single transform. 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If AnimationSet sets any properties that its children also set 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (for example, duration or fillBefore), the values of AnimationSet 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * override the child values. 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class AnimationSet extends Animation { 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int PROPERTY_FILL_AFTER_MASK = 0x1; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int PROPERTY_FILL_BEFORE_MASK = 0x2; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int PROPERTY_REPEAT_MODE_MASK = 0x4; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int PROPERTY_START_OFFSET_MASK = 0x8; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int PROPERTY_SHARE_INTERPOLATOR_MASK = 0x10; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int PROPERTY_DURATION_MASK = 0x20; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int PROPERTY_MORPH_MATRIX_MASK = 0x40; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int PROPERTY_CHANGE_BOUNDS_MASK = 0x80; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mFlags = 0; 46d4745a689f36211afaff396874d78b1d5202762dRomain Guy private boolean mDirty; 47d4745a689f36211afaff396874d78b1d5202762dRomain Guy private boolean mHasAlpha; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ArrayList<Animation> mAnimations = new ArrayList<Animation>(); 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Transformation mTempTransformation = new Transformation(); 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private long mLastEnd; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private long[] mStoredOffsets; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 58bdbdc4f92951200a88d4c754448b9f91626ffc04The Android Open Source Project * Constructor used when an AnimationSet is loaded from a resource. 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context Application context to use 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param attrs Attribute set from which to read values 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public AnimationSet(Context context, AttributeSet attrs) { 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(context, attrs); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TypedArray a = 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.AnimationSet); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setFlag(PROPERTY_SHARE_INTERPOLATOR_MASK, 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.getBoolean(com.android.internal.R.styleable.AnimationSet_shareInterpolator, true)); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project init(); 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.recycle(); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor to use when building an AnimationSet from code 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param shareInterpolator Pass true if all of the animations in this set 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should use the interpolator assocciated with this AnimationSet. 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Pass false if each animation should use its own interpolator. 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public AnimationSet(boolean shareInterpolator) { 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setFlag(PROPERTY_SHARE_INTERPOLATOR_MASK, shareInterpolator); 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project init(); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected AnimationSet clone() throws CloneNotSupportedException { 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final AnimationSet animation = (AnimationSet) super.clone(); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project animation.mTempTransformation = new Transformation(); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project animation.mAnimations = new ArrayList<Animation>(); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = mAnimations.size(); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> animations = mAnimations; 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project animation.mAnimations.add(animations.get(i).clone()); 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return animation; 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void setFlag(int mask, boolean value) { 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (value) { 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags |= mask; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags &= ~mask; 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void init() { 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStartTime = 0; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDuration = 0; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setFillAfter(boolean fillAfter) { 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags |= PROPERTY_FILL_AFTER_MASK; 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.setFillAfter(fillAfter); 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setFillBefore(boolean fillBefore) { 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags |= PROPERTY_FILL_BEFORE_MASK; 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.setFillBefore(fillBefore); 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setRepeatMode(int repeatMode) { 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags |= PROPERTY_REPEAT_MODE_MASK; 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.setRepeatMode(repeatMode); 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setStartOffset(long startOffset) { 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags |= PROPERTY_START_OFFSET_MASK; 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.setStartOffset(startOffset); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 142c9bcebe969fd6fac40bcef4f23dd8fe99290a90bRomain Guy /** 143c9bcebe969fd6fac40bcef4f23dd8fe99290a90bRomain Guy * @hide 144c9bcebe969fd6fac40bcef4f23dd8fe99290a90bRomain Guy */ 145d4745a689f36211afaff396874d78b1d5202762dRomain Guy @Override 146d4745a689f36211afaff396874d78b1d5202762dRomain Guy public boolean hasAlpha() { 147d4745a689f36211afaff396874d78b1d5202762dRomain Guy if (mDirty) { 148d4745a689f36211afaff396874d78b1d5202762dRomain Guy mDirty = mHasAlpha = false; 149d4745a689f36211afaff396874d78b1d5202762dRomain Guy 150d4745a689f36211afaff396874d78b1d5202762dRomain Guy final int count = mAnimations.size(); 151d4745a689f36211afaff396874d78b1d5202762dRomain Guy final ArrayList<Animation> animations = mAnimations; 152d4745a689f36211afaff396874d78b1d5202762dRomain Guy 153d4745a689f36211afaff396874d78b1d5202762dRomain Guy for (int i = 0; i < count; i++) { 154d4745a689f36211afaff396874d78b1d5202762dRomain Guy if (animations.get(i).hasAlpha()) { 155d4745a689f36211afaff396874d78b1d5202762dRomain Guy mHasAlpha = true; 156d4745a689f36211afaff396874d78b1d5202762dRomain Guy break; 157d4745a689f36211afaff396874d78b1d5202762dRomain Guy } 158d4745a689f36211afaff396874d78b1d5202762dRomain Guy } 159d4745a689f36211afaff396874d78b1d5202762dRomain Guy } 160d4745a689f36211afaff396874d78b1d5202762dRomain Guy 161d4745a689f36211afaff396874d78b1d5202762dRomain Guy return mHasAlpha; 162d4745a689f36211afaff396874d78b1d5202762dRomain Guy } 163d4745a689f36211afaff396874d78b1d5202762dRomain Guy 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Sets the duration of every child animation.</p> 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param durationMillis the duration of the animation, in milliseconds, for 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * every child in this set 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setDuration(long durationMillis) { 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags |= PROPERTY_DURATION_MASK; 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.setDuration(durationMillis); 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Add a child animation to this animation set. 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The transforms of the child animations are applied in the order 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that they were added 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param a Animation to add. 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void addAnimation(Animation a) { 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAnimations.add(a); 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean noMatrix = (mFlags & PROPERTY_MORPH_MATRIX_MASK) == 0; 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (noMatrix && a.willChangeTransformationMatrix()) { 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags |= PROPERTY_MORPH_MATRIX_MASK; 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean changeBounds = (mFlags & PROPERTY_CHANGE_BOUNDS_MASK) == 0; 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (changeBounds && a.willChangeTransformationMatrix()) { 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags |= PROPERTY_CHANGE_BOUNDS_MASK; 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mAnimations.size() == 1) { 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDuration = a.getStartOffset() + a.getDuration(); 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLastEnd = mStartOffset + mDuration; 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLastEnd = Math.max(mLastEnd, a.getStartOffset() + a.getDuration()); 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDuration = mLastEnd - mStartOffset; 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 202d4745a689f36211afaff396874d78b1d5202762dRomain Guy 203d4745a689f36211afaff396874d78b1d5202762dRomain Guy mDirty = true; 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the start time of this animation and all child animations 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.animation.Animation#setStartTime(long) 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setStartTime(long startTimeMillis) { 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.setStartTime(startTimeMillis); 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = mAnimations.size(); 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> animations = mAnimations; 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Animation a = animations.get(i); 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.setStartTime(startTimeMillis); 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long getStartTime() { 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long startTime = Long.MAX_VALUE; 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = mAnimations.size(); 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> animations = mAnimations; 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Animation a = animations.get(i); 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startTime = Math.min(startTime, a.getStartTime()); 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return startTime; 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void restrictDuration(long durationMillis) { 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.restrictDuration(durationMillis); 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> animations = mAnimations; 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int count = animations.size(); 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project animations.get(i).restrictDuration(durationMillis); 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The duration of an AnimationSet is defined to be the 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * duration of the longest child animation. 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.animation.Animation#getDuration() 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long getDuration() { 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> animations = mAnimations; 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = animations.size(); 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long duration = 0; 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean durationSet = (mFlags & PROPERTY_DURATION_MASK) == PROPERTY_DURATION_MASK; 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (durationSet) { 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project duration = mDuration; 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project duration = Math.max(duration, animations.get(i).getDuration()); 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return duration; 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The duration hint of an animation set is the maximum of the duration 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * hints of all of its component animations. 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.animation.Animation#computeDurationHint 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long computeDurationHint() { 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long duration = 0; 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = mAnimations.size(); 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> animations = mAnimations; 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = count - 1; i >= 0; --i) { 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long d = animations.get(i).computeDurationHint(); 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (d > duration) duration = d; 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return duration; 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void initializeInvalidateRegion(int left, int top, int right, int bottom) { 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final RectF region = mPreviousRegion; 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project region.set(left, top, right, bottom); 2984df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project region.inset(-1.0f, -1.0f); 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mFillBefore) { 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = mAnimations.size(); 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> animations = mAnimations; 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Transformation temp = mTempTransformation; 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Transformation previousTransformation = mPreviousTransformation; 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = count - 1; i >= 0; --i) { 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Animation a = animations.get(i); 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project temp.clear(); 3114766defdd0778d7e0a656179d03a4865a9a40523Andreas Agvard final Interpolator interpolator = a.mInterpolator; 3124766defdd0778d7e0a656179d03a4865a9a40523Andreas Agvard a.applyTransformation(interpolator != null ? interpolator.getInterpolation(0.0f) 3134766defdd0778d7e0a656179d03a4865a9a40523Andreas Agvard : 0.0f, temp); 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project previousTransformation.compose(temp); 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The transformation of an animation set is the concatenation of all of its 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * component animations. 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.animation.Animation#getTransformation 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean getTransformation(long currentTime, Transformation t) { 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = mAnimations.size(); 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> animations = mAnimations; 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Transformation temp = mTempTransformation; 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean more = false; 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean started = false; 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean ended = true; 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project t.clear(); 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = count - 1; i >= 0; --i) { 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Animation a = animations.get(i); 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project temp.clear(); 3414846032ac7be7c28c7cfeb3096b8cb656312a382Chet Haase more = a.getTransformation(currentTime, temp, getScaleFactor()) || more; 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project t.compose(temp); 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project started = started || a.hasStarted(); 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ended = a.hasEnded() && ended; 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (started && !mStarted) { 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mListener != null) { 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListener.onAnimationStart(this); 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStarted = true; 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ended != mEnded) { 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mListener != null) { 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListener.onAnimationEnd(this); 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEnded = ended; 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return more; 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.animation.Animation#scaleCurrentDuration(float) 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void scaleCurrentDuration(float scale) { 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> animations = mAnimations; 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int count = animations.size(); 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project animations.get(i).scaleCurrentDuration(scale); 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.animation.Animation#initialize(int, int, int, int) 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void initialize(int width, int height, int parentWidth, int parentHeight) { 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.initialize(width, height, parentWidth, parentHeight); 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean durationSet = (mFlags & PROPERTY_DURATION_MASK) == PROPERTY_DURATION_MASK; 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean fillAfterSet = (mFlags & PROPERTY_FILL_AFTER_MASK) == PROPERTY_FILL_AFTER_MASK; 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean fillBeforeSet = (mFlags & PROPERTY_FILL_BEFORE_MASK) == PROPERTY_FILL_BEFORE_MASK; 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean repeatModeSet = (mFlags & PROPERTY_REPEAT_MODE_MASK) == PROPERTY_REPEAT_MODE_MASK; 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean shareInterpolator = (mFlags & PROPERTY_SHARE_INTERPOLATOR_MASK) 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project == PROPERTY_SHARE_INTERPOLATOR_MASK; 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean startOffsetSet = (mFlags & PROPERTY_START_OFFSET_MASK) 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project == PROPERTY_START_OFFSET_MASK; 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (shareInterpolator) { 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ensureInterpolator(); 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> children = mAnimations; 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = children.size(); 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long duration = mDuration; 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final boolean fillAfter = mFillAfter; 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final boolean fillBefore = mFillBefore; 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int repeatMode = mRepeatMode; 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Interpolator interpolator = mInterpolator; 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long startOffset = mStartOffset; 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long[] storedOffsets = mStoredOffsets; 4094df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (startOffsetSet) { 4104df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (storedOffsets == null || storedOffsets.length != count) { 4114df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project storedOffsets = mStoredOffsets = new long[count]; 4124df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 4134df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } else if (storedOffsets != null) { 4144df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project storedOffsets = mStoredOffsets = null; 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Animation a = children.get(i); 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (durationSet) { 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.setDuration(duration); 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (fillAfterSet) { 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.setFillAfter(fillAfter); 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (fillBeforeSet) { 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.setFillBefore(fillBefore); 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (repeatModeSet) { 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.setRepeatMode(repeatMode); 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (shareInterpolator) { 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.setInterpolator(interpolator); 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (startOffsetSet) { 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long offset = a.getStartOffset(); 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.setStartOffset(offset + startOffset); 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project storedOffsets[i] = offset; 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.initialize(width, height, parentWidth, parentHeight); 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void reset() { 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.reset(); 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project restoreChildrenStartOffset(); 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void restoreChildrenStartOffset() { 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long[] offsets = mStoredOffsets; 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (offsets == null) return; 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> children = mAnimations; 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = children.size(); 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project children.get(i).setStartOffset(offsets[i]); 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return All the child animations in this AnimationSet. Note that 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this may include other AnimationSets, which are not expanded. 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public List<Animation> getAnimations() { 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mAnimations; 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean willChangeTransformationMatrix() { 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (mFlags & PROPERTY_MORPH_MATRIX_MASK) == PROPERTY_MORPH_MATRIX_MASK; 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean willChangeBounds() { 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (mFlags & PROPERTY_CHANGE_BOUNDS_MASK) == PROPERTY_CHANGE_BOUNDS_MASK; 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 482