动画在Android开发中还是经常会用到的,下面分享一些集成的方法,供大家参考使用。
package com.xx.xxx;
import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.TranslateAnimation;
public class XjAnimationUtils {
/**
* @author XiaoXiong
* @function 旋转动画
* @time 2016年7月6日 上午11:09:06
* @param duration 时间
* @param fromAngle 起始度数
* @param toAngle 结束度数
* @param isFillAfter 淡出位置
* @param repeatCount 重复次数
* @return RotateAnimation
*/
public static RotateAnimation initRotateAnimation(long duration,
int fromAngle, int toAngle,
boolean isFillAfter, int repeatCount) {
RotateAnimation mLoadingRotateAnimation = new RotateAnimation(fromAngle, toAngle,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
LinearInterpolator lirInterpolator = new LinearInterpolator();
mLoadingRotateAnimation.setInterpolator(lirInterpolator);
mLoadingRotateAnimation.setDuration(duration);
mLoadingRotateAnimation.setFillAfter(isFillAfter);
mLoadingRotateAnimation.setRepeatCount(repeatCount);
mLoadingRotateAnimation.setRepeatMode(Animation.RESTART);
return mLoadingRotateAnimation;
}
/**
* @author XiaoXiong
* @function 旋转动画
* @time 2016年7月6日 上午10:51:17
* @param isClockWise 是否是顺时针
* @param duration 旋转一圈的时间
* @param isFillAfter 淡出位置
* @param repeatCount 重复次数
* @return RotateAnimation
*/
public static RotateAnimation initRotateAnimation(boolean isClockWise, long duration,
boolean isFillAfter, int repeatCount) {
int endAngle;
if (isClockWise) {
endAngle = 360;
} else {
endAngle = -360;
}
RotateAnimation mLoadingRotateAnimation = new RotateAnimation(0, endAngle,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
LinearInterpolator lirInterpolator = new LinearInterpolator();
mLoadingRotateAnimation.setInterpolator(lirInterpolator);
mLoadingRotateAnimation.setDuration(duration);
mLoadingRotateAnimation.setFillAfter(isFillAfter);
mLoadingRotateAnimation.setRepeatCount(repeatCount);
mLoadingRotateAnimation.setRepeatMode(Animation.RESTART);
return mLoadingRotateAnimation;
}
/**
* @author XiaoXiong
* @function 帧动画
* @time 2016年7月6日 上午10:56:26
* @param context 上下文对象
* @param drawableIds 图片集
* @param durationTime 帧时间
* @param isOneShot 是否只播放一次
* @return AnimationDrawable
*/
public static AnimationDrawable initAnimationDrawable(Context context, int[] drawableIds,
int durationTime, boolean isOneShot) {
AnimationDrawable mAnimationDrawable = new AnimationDrawable();
for (int i = 0; i < drawableIds.length; i++) {
int id = drawableIds[i];
mAnimationDrawable.addFrame(context.getResources().getDrawable(id), durationTime);
}
mAnimationDrawable.setOneShot(isOneShot);
return mAnimationDrawable;
}
/**
* @author XiaoXiong
* @function 透明度动画
* @time 2016年7月6日 上午11:07:21
* @param context 上下文对象
* @param fromAlpha 起始透明度
* @param toAlpha 结束透明度
* @param duration 时间
* @return Animation
*/
public static Animation initAlphaAnimtion(Context context, float fromAlpha, float toAlpha,
long duration) {
Animation alphaAnimation = new AlphaAnimation(fromAlpha, toAlpha);
alphaAnimation.setDuration(duration);
return alphaAnimation;
}
/**
* @author XiaoXiong
* @function 位移动画
* @time 2016年7月6日 上午11:12:16
* @param startX X轴开始位置
* @param toX X轴结束位置
* @param startY Y轴开始位置
* @param toY Y轴结束位置
* @param duration 时间
* @return TranslateAnimation
*/
public static TranslateAnimation initTranslateAnimation(int startX, int toX, int startY, int toY , long duration) {
TranslateAnimation anim = new TranslateAnimation(startX, toX, startY, toY);
anim.setDuration(duration);
anim.setFillAfter(true);
return anim ;
}
}