/*
* Created by LuaView.
* Copyright (c) 2017, Alibaba Group. All rights reserved.
*
* This source code is licensed under the MIT.
* For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
*/
package com.taobao.luaview.userdata.ui;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import com.taobao.luaview.userdata.base.BaseUserdata;
import com.taobao.luaview.util.DimenUtil;
import com.taobao.luaview.util.LuaUtil;
import org.luaj.vm2.Globals;
import org.luaj.vm2.LuaFunction;
import org.luaj.vm2.LuaTable;
import org.luaj.vm2.LuaValue;
import org.luaj.vm2.Varargs;
/**
* AlphaAnimation, RotateAnimation, ScaleAnimation, TranslateAnimation
* 废弃,使用Animator来处理
* @author song
*/
@Deprecated
public class UDAnimation extends BaseUserdata {
private static final int TYPE_ALPHA = 1;
private static final int TYPE_ROTATE = 2;
private static final int TYPE_SCALE = 3;
private static final int TYPE_TRANSLATE = 4;
private LuaValue mOnStartCallback;
private LuaValue mOnEndCallback;
private LuaValue mOnRepeatCallback;
private int mAnimationType;
private float[] mValues;
private long mDuration = 300;
private long mStartOffset = 0;
private int mRepeatCount = 0;
public UDAnimation(Globals globals, LuaValue metaTable, Varargs varargs) {
super(globals, metaTable, varargs);
}
public UDAnimation setAnimationType(int type) {
mAnimationType = type;
return this;
}
public UDAnimation alpha(float... values) {
this.mAnimationType = TYPE_ALPHA;
this.mValues = values;
return this;
}
public UDAnimation rotate(float... values) {
this.mAnimationType = TYPE_ROTATE;
this.mValues = values;
return this;
}
public UDAnimation scale(float... values) {
this.mAnimationType = TYPE_SCALE;
this.mValues = values;
return this;
}
public UDAnimation translate(float... values) {
this.mAnimationType = TYPE_TRANSLATE;
this.mValues = values;
return this;
}
public UDAnimation setValue(float... values) {
this.mValues = values;
return this;
}
public UDAnimation setDuration(long duration) {
this.mDuration = duration;
return this;
}
public UDAnimation setStartDelay(long mStartDelay) {
this.mStartOffset = mStartDelay;
return this;
}
public UDAnimation setRepeatCount(int mRepeatCount) {
this.mRepeatCount = mRepeatCount;
return this;
}
public UDAnimation setOnRepeatCallback(LuaFunction mOnRepeatCallback) {
this.mOnRepeatCallback = mOnRepeatCallback;
return this;
}
public UDAnimation setOnStartCallback(LuaFunction mOnStartCallback) {
this.mOnStartCallback = mOnStartCallback;
return this;
}
public UDAnimation setOnEndCallback(LuaFunction mOnEndCallback) {
this.mOnEndCallback = mOnEndCallback;
return this;
}
public UDAnimation setCallback(LuaTable callback) {
if (callback != null) {
this.mOnStartCallback = LuaUtil.getFunction(callback, "OnStart", "onStart");
this.mOnEndCallback = LuaUtil.getFunction(callback, "OnEnd", "onEnd");
this.mOnRepeatCallback = LuaUtil.getFunction(callback, "OnRepeat", "onRepeat");
}
return this;
}
/**
* build an animation
*
* @return
*/
public Animation build(View view) {
Animation animation = null;
if (view != null) {
switch (mAnimationType) {
case TYPE_ALPHA:
if (this.mValues != null && this.mValues.length > 0) {
animation = new AlphaAnimation(view.getAlpha(), this.mValues[0]);
}
break;
case TYPE_ROTATE:
if (this.mValues != null && this.mValues.length > 0) {
animation = new RotateAnimation(view.getRotation(), this.mValues[0]);
}
break;
case TYPE_SCALE:
if (this.mValues != null && this.mValues.length > 1) {
animation = new ScaleAnimation(view.getScaleX(), this.mValues[0], view.getScaleY(), this.mValues[1]);
}
break;
case TYPE_TRANSLATE:
if (this.mValues != null && this.mValues.length > 1) {
animation = new TranslateAnimation(view.getX(), DimenUtil.dpiToPx(this.mValues[0]), view.getY(), DimenUtil.dpiToPx(this.mValues[1]));
}
break;
}
if (animation != null) {
animation.setFillEnabled(true);
animation.setFillAfter(true);//默认结束后设置属性
animation.setFillBefore(true);
animation.setDuration(mDuration);
animation.setStartOffset(mStartOffset);
animation.setRepeatCount(mRepeatCount);
if (mOnStartCallback != null || mOnRepeatCallback != null || mOnEndCallback != null) {
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
LuaUtil.callFunction(mOnStartCallback);
}
@Override
public void onAnimationEnd(Animation animation) {
LuaUtil.callFunction(mOnEndCallback);
}
@Override
public void onAnimationRepeat(Animation animation) {
LuaUtil.callFunction(mOnRepeatCallback);
}
});
}
}
}
return animation;
}
}