Android 移动跟渐变动画代码实现(AnimationUtils)

来源:互联网 发布:vb中picturebox画粗线 编辑:程序博客网 时间:2024/05/17 03:28

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;    }}
0 0