lottie/model: Fixed hold interpolation issue.

Change-Id: I0db56ec46a9f6fec04311d9c96dcea680e29ab5b
This commit is contained in:
subhransu mohanty
2018-07-13 11:26:17 +09:00
parent 7501ff54a6
commit e7726056b3
2 changed files with 5 additions and 17 deletions

View File

@@ -241,28 +241,20 @@ template<typename T>
class LOTAnimInfo
{
public:
bool hasKeyFrame(int frameNo) {
if (frameNo >= mStartFrame && frameNo <= mEndFrame)
return true;
else
return false;
}
T value(int frameNo) const {
if (mStartFrame >= frameNo)
if (mKeyFrames.front().mStartFrame >= frameNo)
return mKeyFrames.front().mStartValue;
if(mEndFrame <= frameNo)
if(mKeyFrames.back().mEndFrame <= frameNo)
return mKeyFrames.back().mEndValue;
for(auto keyFrame : mKeyFrames) {
if (frameNo >= keyFrame.mStartFrame && frameNo <= keyFrame.mEndFrame)
if (frameNo >= keyFrame.mStartFrame && frameNo < keyFrame.mEndFrame)
return keyFrame.value(frameNo);
}
return T();
}
public:
std::vector<LOTKeyFrame<T>> mKeyFrames;
int mStartFrame;
int mEndFrame;
};
template<typename T>

View File

@@ -1649,6 +1649,7 @@ void LottieParserImpl::parseKeyFrame(LOTAnimInfo<T> &obj)
inTangent = VPointF();
outTangent = VPointF();
keyframe.mEndValue = keyframe.mStartValue;
keyframe.mEndFrame = keyframe.mStartFrame;
}
// Try to find the interpolator from cache
@@ -1660,13 +1661,8 @@ void LottieParserImpl::parseKeyFrame(LOTAnimInfo<T> &obj)
keyframe.mInterpolator = std::make_shared<VInterpolator>(VInterpolator(inTangent, outTangent));
compRef->mInterpolatorCache[interpolatorKey] = keyframe.mInterpolator;
}
} else {
/* this is the last key frame. update the first and last frame of this property */
obj.mStartFrame = obj.mKeyFrames.front().mStartFrame;
obj.mEndFrame = keyframe.mStartFrame;
return;
obj.mKeyFrames.push_back(keyframe);
}
obj.mKeyFrames.push_back(keyframe);
}