import android.animation.ArgbEvaluator; //导入方法依赖的package包/类
@Override
void updateViewWithPercent(View child, float percent) {
super.updateViewWithPercent(child, percent);
float newX = targetX == UNSPECIFIED_INT ? 0 : (targetX - mStartX) * percent;
float newY = targetY == UNSPECIFIED_INT ? 0 : (targetY - mStartY) * percent;
// set scale
if (targetWidth != UNSPECIFIED_INT || targetHeight != UNSPECIFIED_INT) {
float newWidth = mStartWidth + ((targetWidth - mStartWidth) * percent);
float newHeight = mStartHeight + ((targetHeight - mStartHeight) * percent);
child.setScaleX(newWidth / mStartWidth);
child.setScaleY(newHeight / mStartHeight);
// make up position for scale change
newX -= (mStartWidth - newWidth) / 2;
newY -= (mStartHeight - newHeight) / 2;
}
// set new position
child.setTranslationX(newX);
child.setTranslationY(newY);
// set alpha
if (targetAlpha != UNSPECIFIED_FLOAT) {
child.setAlpha(mStartAlpha + (targetAlpha - mStartAlpha) * percent);
}
// set background color
if (targetBackgroundColor != UNSPECIFIED_INT && mStartBackgroundColor != 0) {
ArgbEvaluator evaluator = new ArgbEvaluator();
int color = (int) evaluator.evaluate(percent, mStartBackgroundColor, targetBackgroundColor);
child.setBackgroundColor(color);
}
// set rotation
if (targetRotateX != UNSPECIFIED_FLOAT) {
child.setRotationX(mStartRotateX + (targetRotateX - mStartRotateX) * percent);
}
if (targetRotateY != UNSPECIFIED_FLOAT) {
child.setRotationY(mStartRotateY + (targetRotateY - mStartRotateY) * percent);
}
child.requestLayout();
}