You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
4.8 KiB
153 lines
4.8 KiB
5 months ago
|
/*
|
||
|
* Copyright (C) 2006 The Android Open Source Project
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
|
||
|
#pragma once
|
||
|
#include <animation/SAnimation.h>
|
||
|
#include <souicoll.h>
|
||
|
|
||
|
/**
|
||
|
* Represents a group of Animations that should be played together.
|
||
|
* The transformation of each individual animation are composed
|
||
|
* together into a single transform.
|
||
|
* If AnimationSet sets any properties that its children also set
|
||
|
* (for example, duration or fillBefore), the values of AnimationSet
|
||
|
* override the child values.
|
||
|
*
|
||
|
* <p>The way that AnimationSet inherits behavior from Animation is important to
|
||
|
* understand. Some of the Animation attributes applied to AnimationSet affect the
|
||
|
* AnimationSet itself, some are pushed down to the children, and some are ignored,
|
||
|
* as follows:
|
||
|
* <ul>
|
||
|
* <li>duration, repeatMode, fillBefore, fillAfter: These properties, when set
|
||
|
* on an AnimationSet object, will be pushed down to all child animations.</li>
|
||
|
* <li>repeatCount, fillEnabled: These properties are ignored for AnimationSet.</li>
|
||
|
* <li>startOffset, shareInterpolator: These properties apply to the AnimationSet itself.</li>
|
||
|
* </ul>
|
||
|
* Starting with {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH},
|
||
|
* the behavior of these properties is the same in XML resources and at runtime (prior to that
|
||
|
* release, the values set in XML were ignored for AnimationSet). That is, calling
|
||
|
* <code>setDuration(500)</code> on an AnimationSet has the same effect as declaring
|
||
|
* <code>android:duration="500"</code> in an XML resource for an AnimationSet object.</p>
|
||
|
*/
|
||
|
|
||
|
namespace SOUI{
|
||
|
|
||
|
class SOUI_EXP SAnimationSet : public SAnimation {
|
||
|
SOUI_CLASS_NAME(SAnimationSet,L"set")
|
||
|
enum{
|
||
|
PROPERTY_FILL_AFTER_MASK = 0x1,
|
||
|
PROPERTY_FILL_BEFORE_MASK = 0x2,
|
||
|
PROPERTY_DURATION_MASK = 0x04,
|
||
|
PROPERTY_SHARE_INTERPOLATOR_MASK = 0x08,
|
||
|
};
|
||
|
|
||
|
private:
|
||
|
int mFlags;
|
||
|
bool mDirty;
|
||
|
bool mHasAlpha;
|
||
|
|
||
|
SArray<SAutoRefPtr<IAnimation> > mAnimations;
|
||
|
bool mChildStarted;
|
||
|
long mLastEnd;
|
||
|
|
||
|
/**
|
||
|
* Constructor to use when building an AnimationSet from code
|
||
|
*
|
||
|
* @param shareInterpolator Pass true if all of the animations in this set
|
||
|
* should use the interpolator associated with this AnimationSet.
|
||
|
* Pass false if each animation should use its own interpolator.
|
||
|
*/
|
||
|
public: SAnimationSet(bool shareInterpolator=true);
|
||
|
|
||
|
private:
|
||
|
void setFlag(int mask, bool value);
|
||
|
|
||
|
private:
|
||
|
void init();
|
||
|
|
||
|
public:
|
||
|
void setFillAfter(bool fillAfter);
|
||
|
|
||
|
void setFillBefore(bool fillBefore);
|
||
|
|
||
|
/**
|
||
|
* @hide
|
||
|
*/
|
||
|
bool hasAlpha();
|
||
|
|
||
|
/**
|
||
|
* <p>Sets the duration of every child animation.</p>
|
||
|
*
|
||
|
* @param durationMillis the duration of the animation, in milliseconds, for
|
||
|
* every child in this set
|
||
|
*/
|
||
|
void setDuration(long durationMillis);
|
||
|
|
||
|
/**
|
||
|
* Add a child animation to this animation set.
|
||
|
* The transforms of the child animations are applied in the order
|
||
|
* that they were added
|
||
|
* @param a Animation to add.
|
||
|
*/
|
||
|
void addAnimation(IAnimation *a);
|
||
|
|
||
|
/**
|
||
|
* The duration of an AnimationSet is defined to be the
|
||
|
* duration of the longest child animation.
|
||
|
*
|
||
|
* @see android.view.animation.Animation#getDuration()
|
||
|
*/
|
||
|
long getDuration() const;
|
||
|
|
||
|
|
||
|
/**
|
||
|
* The transformation of an animation set is the concatenation of all of its
|
||
|
* component animations.
|
||
|
*
|
||
|
* @see android.view.animation.Animation#getTransformation
|
||
|
*/
|
||
|
bool getTransformation(int64_t currentTime, STransformation &t);
|
||
|
|
||
|
/**
|
||
|
* @see android.view.animation.Animation#scaleCurrentDuration(float)
|
||
|
*/
|
||
|
void scaleCurrentDuration(float scale);
|
||
|
|
||
|
/**
|
||
|
* @see android.view.animation.Animation#initialize(int, int, int, int)
|
||
|
*/
|
||
|
void initialize(int width, int height, int parentWidth, int parentHeight);
|
||
|
|
||
|
virtual void copy(const IAnimation* src);
|
||
|
protected:
|
||
|
BOOL InitFromXml(pugi::xml_node xmlNode);
|
||
|
|
||
|
HRESULT OnAttrDuration(const SStringW & value, BOOL bLoading);
|
||
|
HRESULT OnAttrFillBefore(const SStringW & value, BOOL bLoading);
|
||
|
HRESULT OnAttrFillAfter(const SStringW & value, BOOL bLoading);
|
||
|
HRESULT OnAttrStartOffset(const SStringW & value, BOOL bLoading);
|
||
|
|
||
|
SOUI_ATTRS_BEGIN()
|
||
|
ATTR_BIT(L"shareInterpolator", mFlags, PROPERTY_SHARE_INTERPOLATOR_MASK, FALSE)
|
||
|
ATTR_CUSTOM(L"duration", OnAttrDuration)
|
||
|
ATTR_CUSTOM(L"fillBefore", OnAttrFillBefore)
|
||
|
ATTR_CUSTOM(L"fillAfter", OnAttrFillAfter)
|
||
|
ATTR_CUSTOM(L"startOffset", OnAttrStartOffset)
|
||
|
SOUI_ATTRS_END()
|
||
|
};
|
||
|
|
||
|
}
|