Android动画实现的有两个方式:
1、在代码中通过实例化Animation
使用:view.startAnimation(Animation animation)
2、通过在res——>anim 添加xml文件
使用:view.setAnimation(AnimationUtils.loadAnimation(Context context,int id));
上面使用到了startAnimation跟setAnimation
区别:startAnimation来启动动画,setAnimation启动动画是需要条件的(具体可以查网)
这里想跟大家介绍的是第一种。
不过不是否认第二种,只是觉得第二种的话要新建很多xml文件,比较麻烦。
一、这里提供一个工具类:AnimationUtils 支持移动跟渐变动画效果,缩放跟旋转动画暂时还没写,后续有需要会更新上来
/**
* @author SoBan
* @create 2017/2/6 10:02.
* 调用方式: view.startAnimation(AnimationUtils.method(...));
*/
public class AnimationUtils {
/**
* 渐变的一种效果
*
* @param fromAlpha
* @param toAlpha
*/
public static Animation setAlphaAnimation(float fromAlpha, float toAlpha) {
Animation alphaAnimation = new AlphaAnimation(fromAlpha, toAlpha);
alphaAnimation.setDuration(500);
return alphaAnimation;
}
/**
* 定义从屏幕顶部进入的动画效果
*
* @param context
*/
public static Animation inFromTopAnimation(Context context) {
Animation inFromTop = new TranslateAnimation(0.0f, 0.0f, -DensityUtils.getScreenHeight(context), 0.0f);
inFromTop.setFillAfter(true);
inFromTop.setDuration(500);
inFromTop.setRepeatMode(Animation.ZORDER_BOTTOM);
return inFromTop;
}
/**
* 定义从屏幕顶部退出的动画效果
*
* @param context
*/
public static Animation outToTopAnimation(Context context) {
Animation outToTop = new TranslateAnimation(0.0f, 0.0f, 0.0f, -DensityUtils.getScreenHeight(context));
outToTop.setFillAfter(true);
outToTop.setDuration(500);
outToTop.setRepeatMode(Animation.ZORDER_BOTTOM);
return outToTop;
}
/**
* 定义从屏幕底部进入的动画效果
*
* @param context
*/
public static Animation inFromBottomAnimation(Context context) {
Animation inFromBottom = new TranslateAnimation(0.0f, 0.0f, DensityUtils.getScreenHeight(context), 0.0f);
inFromBottom.setFillAfter(true);
inFromBottom.setDuration(500);
inFromBottom.setRepeatMode(Animation.ZORDER_TOP);
return inFromBottom;
}
/**
* 定义从屏幕底部退出的动画效果
*
* @param context
*/
public static Animation outToBottomAnimation(Context context) {
Animation outToBottom = new TranslateAnimation(0.0f, 0.0f, 0.0f, DensityUtils.getScreenHeight(context));
outToBottom.setFillAfter(true);
outToBottom.setDuration(500);
outToBottom.setRepeatMode(Animation.ZORDER_NORMAL);
return outToBottom;
}
/**
* 定义从左侧进入的动画效果
*/
public static Animation inFromLeftAnimation() {
Animation inFromLeft = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, -1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
inFromLeft.setDuration(500);
inFromLeft.setInterpolator(new AccelerateInterpolator());
return inFromLeft;
}
/**
* 定义从左侧退出的动画效果
*/
public static Animation outToLeftAnimation() {
Animation outtoLeft = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, -1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
outtoLeft.setDuration(500);
outtoLeft.setInterpolator(new AccelerateInterpolator());
return outtoLeft;
}
/**
* 定义从右侧进入的动画效果
*/
public static Animation inFromRightAnimation() {
Animation inFromRight = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, +1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
inFromRight.setDuration(500);
inFromRight.setInterpolator(new AccelerateInterpolator());
return inFromRight;
}
/**
* 定义从右侧退出时的动画效果
*/
public static Animation outToRightAnimation() {
Animation outtoRight = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, +1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
outtoRight.setDuration(500);
outtoRight.setInterpolator(new AccelerateInterpolator());
return outtoRight;
}
}
二、获取屏幕宽高 DensityUtils
public class DensityUtils {
private DensityUtils() {
/* cannot be instantiated */
throw new UnsupportedOperationException("cannot be instantiated");
}
/**
* 获取屏幕宽度
*
* @param context
* @return
*/
public static int getScreenWidth(Context context) {
return context.getResources().getDisplayMetrics().widthPixels;
}
/**
* 获取屏幕高度
*
* @param context
* @return
*/
public static int getScreenHeight(Context context) {
return context.getResources().getDisplayMetrics().heightPixels;
}
}