AnimationSet.java revision 4846032ac7be7c28c7cfeb3096b8cb656312a382
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; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ArrayList<Animation> mAnimations = new ArrayList<Animation>(); 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Transformation mTempTransformation = new Transformation(); 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private long mLastEnd; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private long[] mStoredOffsets; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 56bdbdc4f92951200a88d4c754448b9f91626ffc04The Android Open Source Project * Constructor used when an AnimationSet is loaded from a resource. 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context Application context to use 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param attrs Attribute set from which to read values 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public AnimationSet(Context context, AttributeSet attrs) { 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(context, attrs); 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TypedArray a = 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.AnimationSet); 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setFlag(PROPERTY_SHARE_INTERPOLATOR_MASK, 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.getBoolean(com.android.internal.R.styleable.AnimationSet_shareInterpolator, true)); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project init(); 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.recycle(); 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor to use when building an AnimationSet from code 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param shareInterpolator Pass true if all of the animations in this set 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should use the interpolator assocciated with this AnimationSet. 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Pass false if each animation should use its own interpolator. 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public AnimationSet(boolean shareInterpolator) { 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setFlag(PROPERTY_SHARE_INTERPOLATOR_MASK, shareInterpolator); 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project init(); 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected AnimationSet clone() throws CloneNotSupportedException { 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final AnimationSet animation = (AnimationSet) super.clone(); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project animation.mTempTransformation = new Transformation(); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project animation.mAnimations = new ArrayList<Animation>(); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = mAnimations.size(); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> animations = mAnimations; 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project animation.mAnimations.add(animations.get(i).clone()); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return animation; 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void setFlag(int mask, boolean value) { 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (value) { 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags |= mask; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags &= ~mask; 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void init() { 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStartTime = 0; 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDuration = 0; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setFillAfter(boolean fillAfter) { 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags |= PROPERTY_FILL_AFTER_MASK; 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.setFillAfter(fillAfter); 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setFillBefore(boolean fillBefore) { 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags |= PROPERTY_FILL_BEFORE_MASK; 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.setFillBefore(fillBefore); 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setRepeatMode(int repeatMode) { 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags |= PROPERTY_REPEAT_MODE_MASK; 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.setRepeatMode(repeatMode); 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setStartOffset(long startOffset) { 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags |= PROPERTY_START_OFFSET_MASK; 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.setStartOffset(startOffset); 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Sets the duration of every child animation.</p> 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param durationMillis the duration of the animation, in milliseconds, for 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * every child in this set 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setDuration(long durationMillis) { 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags |= PROPERTY_DURATION_MASK; 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.setDuration(durationMillis); 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Add a child animation to this animation set. 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The transforms of the child animations are applied in the order 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that they were added 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param a Animation to add. 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void addAnimation(Animation a) { 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAnimations.add(a); 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean noMatrix = (mFlags & PROPERTY_MORPH_MATRIX_MASK) == 0; 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (noMatrix && a.willChangeTransformationMatrix()) { 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags |= PROPERTY_MORPH_MATRIX_MASK; 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean changeBounds = (mFlags & PROPERTY_CHANGE_BOUNDS_MASK) == 0; 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (changeBounds && a.willChangeTransformationMatrix()) { 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFlags |= PROPERTY_CHANGE_BOUNDS_MASK; 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mAnimations.size() == 1) { 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDuration = a.getStartOffset() + a.getDuration(); 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLastEnd = mStartOffset + mDuration; 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLastEnd = Math.max(mLastEnd, a.getStartOffset() + a.getDuration()); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDuration = mLastEnd - mStartOffset; 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the start time of this animation and all child animations 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.animation.Animation#setStartTime(long) 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setStartTime(long startTimeMillis) { 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.setStartTime(startTimeMillis); 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = mAnimations.size(); 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> animations = mAnimations; 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Animation a = animations.get(i); 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.setStartTime(startTimeMillis); 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long getStartTime() { 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long startTime = Long.MAX_VALUE; 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = mAnimations.size(); 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> animations = mAnimations; 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Animation a = animations.get(i); 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startTime = Math.min(startTime, a.getStartTime()); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return startTime; 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void restrictDuration(long durationMillis) { 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.restrictDuration(durationMillis); 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> animations = mAnimations; 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int count = animations.size(); 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project animations.get(i).restrictDuration(durationMillis); 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The duration of an AnimationSet is defined to be the 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * duration of the longest child animation. 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.animation.Animation#getDuration() 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long getDuration() { 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> animations = mAnimations; 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = animations.size(); 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long duration = 0; 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean durationSet = (mFlags & PROPERTY_DURATION_MASK) == PROPERTY_DURATION_MASK; 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (durationSet) { 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project duration = mDuration; 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project duration = Math.max(duration, animations.get(i).getDuration()); 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return duration; 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The duration hint of an animation set is the maximum of the duration 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * hints of all of its component animations. 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.animation.Animation#computeDurationHint 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long computeDurationHint() { 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long duration = 0; 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = mAnimations.size(); 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> animations = mAnimations; 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = count - 1; i >= 0; --i) { 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long d = animations.get(i).computeDurationHint(); 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (d > duration) duration = d; 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return duration; 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void initializeInvalidateRegion(int left, int top, int right, int bottom) { 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final RectF region = mPreviousRegion; 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project region.set(left, top, right, bottom); 2724df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project region.inset(-1.0f, -1.0f); 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mFillBefore) { 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = mAnimations.size(); 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> animations = mAnimations; 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Transformation temp = mTempTransformation; 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Transformation previousTransformation = mPreviousTransformation; 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = count - 1; i >= 0; --i) { 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Animation a = animations.get(i); 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project temp.clear(); 2854766defdd0778d7e0a656179d03a4865a9a40523Andreas Agvard final Interpolator interpolator = a.mInterpolator; 2864766defdd0778d7e0a656179d03a4865a9a40523Andreas Agvard a.applyTransformation(interpolator != null ? interpolator.getInterpolation(0.0f) 2874766defdd0778d7e0a656179d03a4865a9a40523Andreas Agvard : 0.0f, temp); 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project previousTransformation.compose(temp); 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The transformation of an animation set is the concatenation of all of its 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * component animations. 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.animation.Animation#getTransformation 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean getTransformation(long currentTime, Transformation t) { 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 boolean more = false; 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean started = false; 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean ended = true; 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project t.clear(); 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = count - 1; i >= 0; --i) { 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Animation a = animations.get(i); 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project temp.clear(); 3154846032ac7be7c28c7cfeb3096b8cb656312a382Chet Haase more = a.getTransformation(currentTime, temp, getScaleFactor()) || more; 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project t.compose(temp); 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project started = started || a.hasStarted(); 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ended = a.hasEnded() && ended; 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (started && !mStarted) { 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mListener != null) { 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListener.onAnimationStart(this); 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStarted = true; 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ended != mEnded) { 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mListener != null) { 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mListener.onAnimationEnd(this); 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEnded = ended; 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return more; 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.animation.Animation#scaleCurrentDuration(float) 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void scaleCurrentDuration(float scale) { 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> animations = mAnimations; 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int count = animations.size(); 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project animations.get(i).scaleCurrentDuration(scale); 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.animation.Animation#initialize(int, int, int, int) 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void initialize(int width, int height, int parentWidth, int parentHeight) { 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.initialize(width, height, parentWidth, parentHeight); 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean durationSet = (mFlags & PROPERTY_DURATION_MASK) == PROPERTY_DURATION_MASK; 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean fillAfterSet = (mFlags & PROPERTY_FILL_AFTER_MASK) == PROPERTY_FILL_AFTER_MASK; 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean fillBeforeSet = (mFlags & PROPERTY_FILL_BEFORE_MASK) == PROPERTY_FILL_BEFORE_MASK; 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean repeatModeSet = (mFlags & PROPERTY_REPEAT_MODE_MASK) == PROPERTY_REPEAT_MODE_MASK; 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean shareInterpolator = (mFlags & PROPERTY_SHARE_INTERPOLATOR_MASK) 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project == PROPERTY_SHARE_INTERPOLATOR_MASK; 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean startOffsetSet = (mFlags & PROPERTY_START_OFFSET_MASK) 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project == PROPERTY_START_OFFSET_MASK; 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (shareInterpolator) { 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ensureInterpolator(); 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> children = mAnimations; 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = children.size(); 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long duration = mDuration; 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final boolean fillAfter = mFillAfter; 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final boolean fillBefore = mFillBefore; 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int repeatMode = mRepeatMode; 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Interpolator interpolator = mInterpolator; 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long startOffset = mStartOffset; 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long[] storedOffsets = mStoredOffsets; 3834df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (startOffsetSet) { 3844df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project if (storedOffsets == null || storedOffsets.length != count) { 3854df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project storedOffsets = mStoredOffsets = new long[count]; 3864df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } 3874df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project } else if (storedOffsets != null) { 3884df2423a947bcd3f024cc3d3a1a315a8dc428598The Android Open Source Project storedOffsets = mStoredOffsets = null; 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Animation a = children.get(i); 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (durationSet) { 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.setDuration(duration); 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (fillAfterSet) { 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.setFillAfter(fillAfter); 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (fillBeforeSet) { 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.setFillBefore(fillBefore); 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (repeatModeSet) { 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.setRepeatMode(repeatMode); 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (shareInterpolator) { 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.setInterpolator(interpolator); 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (startOffsetSet) { 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long offset = a.getStartOffset(); 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.setStartOffset(offset + startOffset); 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project storedOffsets[i] = offset; 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.initialize(width, height, parentWidth, parentHeight); 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void reset() { 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.reset(); 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project restoreChildrenStartOffset(); 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void restoreChildrenStartOffset() { 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long[] offsets = mStoredOffsets; 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (offsets == null) return; 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ArrayList<Animation> children = mAnimations; 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int count = children.size(); 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project children.get(i).setStartOffset(offsets[i]); 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return All the child animations in this AnimationSet. Note that 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this may include other AnimationSets, which are not expanded. 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public List<Animation> getAnimations() { 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mAnimations; 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean willChangeTransformationMatrix() { 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (mFlags & PROPERTY_MORPH_MATRIX_MASK) == PROPERTY_MORPH_MATRIX_MASK; 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean willChangeBounds() { 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (mFlags & PROPERTY_CHANGE_BOUNDS_MASK) == PROPERTY_CHANGE_BOUNDS_MASK; 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 456