Android View动画整理

动画区分为补间动画(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>

    然后通过AnimationUtils来加载动画然后启动
    Animation mAlphaAnim = AnimationUtils.loadAnimation(this, R.anim.alpha_animation);
    mIvTest.startAnimation(mAlphaAnim);

    代码书写格式
    AlphaAnimation alphaAnimation=new AlphaAnimation(0.1f,1.0f);
    alphaAnimation.setDuration(2000);
    if(mIvTest!= null){
        mIvTest.startAnimation(alphaAnimation);
    }

    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>

    代码书写格式
    RotateAnimation rotateAnimation=new RotateAnimation(0,360);
                rotateAnimation.setDuration(2000);
    此方式默认旋转中心为起始坐标 view的左上角坐标,因此旋转时围绕左上角坐标旋转。

    RotateAnimation rotateAnimation = new RotateAnimation(0, 360,
                        Animation.RELATIVE_TO_SELF, 0.5f,
                        Animation.RELATIVE_TO_SELF, 0.5f);
    rotateAnimation.setDuration(2000);
    在用代码书写旋转动画时,可以设置旋转的中心有相对自己也有相对父容器的:
    Animation.RELATIVE_TO_SELF
    Animation.RELATIVE_TO_PARENT

    RotateAnimation rotateAnimation=new RotateAnimation(0,360,100,100);
    此方式后两个参数为旋转中心的坐标原点点为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>
    (以下坐标均为相对于view左上角坐标)
    fromXDelta为起始X坐标位置
    fromYDelta为起始Y坐标位置
    toXDelta为终止点X坐标位置
    toYDeltr为终止点Y坐标位置

    代码书写格式:
    TranslateAnimation translateAnimation = new TranslateAnimation(0, 400, 0, 0);
    translateAnimation.setDuration(2000);
    
    具体参数为起始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);
    同样可以写成相对于当前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>
    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);

    指定缩放中心坐标缩放
    ScaleAnimation scaleAnimation = new ScaleAnimation(0, 1.1f, 0, 1.1f, DensityUtils.dip2px(this, 200), 0);
    scaleAnimation.setDuration(2000);

    指定相对于本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);


    如果想要几个动画结合起来使用也可以通过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>

    代码格式
    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);


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



   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值