动画区分为补间动画(TweenAnimation)DrawableAnimation和属性动画(Android3.0( Api 11)后新增的)

1.TweenAnimation补间动画 也称View动画,它包括透明、旋转、缩放和位移四中。

duration代表动画执行时间;pivotX、pivotY代表动画的执行中心 ,如果以自己的百分比为中心则为加% ,如果以父容器为中心则加p,如果以父容器的百分比为中心则加%p

以下是dp转像素和像素转dp

         

public class DensityUtils {

    /**
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
     */
    public static int dip2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    /**
     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
     */
    public static int px2dip(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }
}



xml加载动画方式均为以下格式:

Animation mAnim= AnimationUtils.loadAnimation(this, R.anim.alpha_animation);

   运行动画可以为如下两种格式:

1 .
mIvTest.setAnimation(mAlphaAnim);
mAlphaAnim.start();
2.
mIvTest.startAnimation(mAlphaAnim);




  1. 1.1透明动画可以通过xml或者代码直接书写 xml书写格式:
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="0.1"
    android:toAlpha="1.0"
    android:duration="5000"
    >
</alpha>
  1. 然后通过AnimationUtils来加载动画然后启动
Animation mAlphaAnim = AnimationUtils.loadAnimation(this, R.anim.alpha_animation);
mIvTest.startAnimation(mAlphaAnim);
  1. 代码书写格式
AlphaAnimation alphaAnimation=new AlphaAnimation(0.1f,1.0f);
alphaAnimation.setDuration(2000);
if(mIvTest!= null){
    mIvTest.startAnimation(alphaAnimation);
}
  1. 2、旋转动画
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="5000"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="360"></rotate>
  1. 代码书写格式
RotateAnimation rotateAnimation=new RotateAnimation(0,360);
            rotateAnimation.setDuration(2000);
  1. 此方式默认旋转中心为起始坐标 view的左上角坐标,因此旋转时围绕左上角坐标旋转。
RotateAnimation rotateAnimation = new RotateAnimation(0, 360,
                    Animation.RELATIVE_TO_SELF, 0.5f,
                    Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setDuration(2000);
  1. 在用代码书写旋转动画时,可以设置旋转的中心有相对自己也有相对父容器的:
Animation.RELATIVE_TO_SELF
Animation.RELATIVE_TO_PARENT

RotateAnimation rotateAnimation=new RotateAnimation(0,360,100,100);
  1. 此方式后两个参数为旋转中心的坐标原点点为View左上角坐标。

    3、位移动画
    xml书写格式:
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="5000"
    android:fromXDelta="0"
    android:fromYDelta="0"
    android:toXDelta="100"
    android:toYDelta="100"></translate>
  1. (以下坐标均为相对于view左上角坐标)
    fromXDelta为起始X坐标位置
    fromYDelta为起始Y坐标位置
    toXDelta为终止点X坐标位置
    toYDeltr为终止点Y坐标位置

    代码书写格式:
TranslateAnimation translateAnimation = new TranslateAnimation(0, 400, 0, 0);
translateAnimation.setDuration(2000);
  1. 具体参数为起始X坐标, 终止X坐标; 起始Y坐标,终止Y坐标
TranslateAnimation translateAnimation = new TranslateAnimation(
                    Animation.RELATIVE_TO_SELF,0.0f,//fromXtype fromXvalue
                    Animation.RELATIVE_TO_SELF,0.0f,//toXtype toXvalue
                    Animation.RELATIVE_TO_SELF,0.5f,//fromYtype fromYvalue
                    Animation.RELATIVE_TO_SELF,2.0f//toYtype toYvalue
            );
  translateAnimation.setDuration(2000);
  1. 同样可以写成相对于当前View或者父容器的位置。

    4.缩放动画
    xml格式
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="5000"
    android:fromXScale="0.5"
    android:fromYScale="0.5"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="1.5"
    android:toYScale="1.5"></scale>
  1. pivotX、pivotY为旋转中心点位置。
    fromXScale为X轴方向缩放开始比例占原View的比例。
    fromYScale为Y轴方向缩放开始比例占原View的比例。
    toXScale为X轴方向缩放结束比例占原View的比例。
    toYScale为Y轴方向缩放结束比例占原View的比例。

    代码方式:


    通过查看构造我们能看到有四个构造方法,其中第一个为自定义动画,暂时不说,后面三个根据参数可以明白
    第一个为以View左上角坐标开始缩放
    第二个可以指定缩放中心坐标缩放
    第三个可以指定相对于本View或者父容器位置进行缩放。

    以左上角坐标开始缩放
ScaleAnimation scaleAnimation = new ScaleAnimation(0, 1.1f, 0, 1.1f);
scaleAnimation.setDuration(2000);
  1. 指定缩放中心坐标缩放
ScaleAnimation scaleAnimation = new ScaleAnimation(0, 1.1f, 0, 1.1f, DensityUtils.dip2px(this, 200), 0);
scaleAnimation.setDuration(2000);
  1. 指定相对于本View或者父容器的缩放中心缩放
ScaleAnimation scaleAnimation = new ScaleAnimation(0, 1.0f, 0, 1.0f,
                    Animation.RELATIVE_TO_SELF, 1.0f,
                    Animation.RELATIVE_TO_SELF, 0.0f
            );
scaleAnimation.setDuration(2000);

  1. 如果想要几个动画结合起来使用也可以通过xml或者代码书写
    xml格式
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:shareInterpolator="true">

    <alpha
        android:fromAlpha="0.1"
        android:toAlpha="1.0" />
    <rotate
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="720" />
    <translate
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="0"
        android:toYDelta="100%" />

    <scale
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.5"
        android:toYScale="1.5" />
</set>
  1. 代码格式
AlphaAnimation alphaAnim = new AlphaAnimation(0.1f, 1.0f);
            alphaAnim.setDuration(2000);
            ScaleAnimation scaleAnimation = new ScaleAnimation(1.0f, 0.1f, 1.0f, 0.1f,
                    Animation.RELATIVE_TO_SELF, 0.5f,
                    Animation.RELATIVE_TO_SELF, 0.5f
            );
            scaleAnimation.setDuration(2000);
            TranslateAnimation translateAnimation = new TranslateAnimation(
                    Animation.RELATIVE_TO_SELF,0.0f,//fromXtype fromXvalue
                    Animation.RELATIVE_TO_SELF,0.0f,//toXtype toXvalue
                    Animation.RELATIVE_TO_SELF,0.0f,//fromYtype fromYvalue
                    Animation.RELATIVE_TO_SELF,1.0f//toYtype toYvalue
            );
            translateAnimation.setDuration(2000);
            RotateAnimation rotateAnimation = new RotateAnimation(0, 360,
                    Animation.RELATIVE_TO_SELF, 0.5f,
                    Animation.RELATIVE_TO_SELF, 0.5f);
            rotateAnimation.setDuration(2000);
            AnimationSet animSet = new AnimationSet(true);
            animSet.setDuration(2000);
            animSet.addAnimation(alphaAnim);
            animSet.addAnimation(scaleAnimation);

            animSet.addAnimation(rotateAnimation);

            animSet.addAnimation(translateAnimation);

            mIvTest.startAnimation(animSet);

  1. 如果在整体的动画运行中同时存在旋转和位移,一般是先设置旋转 ,后设置位移,这样就不会出现动画错乱的现象。
    上面就是view动画做的一些整理,方便他人和自己以后查看。