android动画

动画:

分类:分为视图动画属性动画,其中视图动画又分为补间动画逐帧动画补间动画又分为平移动画缩放动画旋转动画透明度动画
创建:利用xml文件来定义View动画的话,需要在工程的res目录下创建anim文件夹,把定义的动画都放到里面


视图动画

补间动画(xml实现、java实现未记录):

公共属性(这些属性是从Animation中继承下来的,在alpha、rotate、scale、translate标签中都可以直接使用。):

    android:duration="3000" // 动画持续时间(ms),必须设置,动画才有效果

    android:startOffset ="1000" // 动画延迟开始时间(ms)

    android:fillBefore = “true” // 动画播放完后,视图是否会停留在动画开始的状态,默认为true

    android:fillAfter = “false” // 动画播放完后,视图是否会停留在动画结束的状态,优先于fillBefore值,默认为false

    android:fillEnabled= “true” // 是否应用fillBefore值,对fillAfter值无影响,默认为true

    android:repeatMode= “restart” // 选择重复播放动画模式,restart代表正序重放,reverse代表倒序回放,默认为restart|

    android:repeatCount = “0” // 重放次数(所以动画的播放次数=重放次数+1),为infinite时无限重复

    android:interpolator = @[package:]anim/interpolator_resource // 插值器,相当于变速器,改变不同阶段的执行速度

平移动画独有属性:

fromXDelta="0"    //x初始位置  /  toXDeleta="500"   //x结束位置

fromYDeleta="0"   /    toYDeleta="500"

平移动画实例( R.anim.view_tran):




    android:duration="3000"

    android:startOffset ="1000"

    android:fillBefore = "true"

    android:fillAfter = "false"

     android:fillEnabled= "true"

     android:repeatMode= "restart"

     android:repeatCount = "0"

     android:fromXDelta="0"

     android:toXDelta="-50"

     android:fromYDelta="0"

     android:toYDelta="-100%"

 />

缩放动画独有属性

fromXScale="0.0"  X从0开始    /  toXScale=“2”  x放大到二倍 

fromYScale  /   toYScale

缩放动画实例(R.anim.view_scal):



    android:duration="3000"

    android:startOffset ="1000"

    android:fillBefore = "true"

    android:fillAfter = "false"

    android:fillEnabled= "true"

    android:repeatMode= "restart"

    android:repeatCount = "0"

    android:fromXScale="0.5"

    android:toXScale="2"

    android:fromYScale="0.5"

    android:toYScale="2"

    android:pivotX="50%"

    android:pivotY="50%"

/>

透明度独有属性:

fromAlpha="1.0" //动画开始是透明度 
toAlpha="0.2"              // 动画结束时透明度

透明度动画实例(R.anim.view_alph):




    android:duration="3000"

    android:startOffset ="1000"

    android:fillBefore = "true"

    android:fillAfter = "false"

    android:fillEnabled= "true"

    android:repeatMode= "restart"

    android:repeatCount = "0"

    android:fromAlpha="1.0"

    android:toAlpha="0.2"

/>

旋转独有属性:

fromDegress="0"  旋转开始角度 //toDegress=“250”   旋转结束角度     

pivotX旋转轴点X坐标   pivotY 旋转轴点Y坐标

旋转动画实例(R.anim.view_rota):




    android:duration="3000"

    android:startOffset ="1000"

    android:fillBefore = "true"

    android:fillAfter = "false"

    android:fillEnabled= "true"

    android:repeatMode= "restart"

    android:repeatCount = "0"

    android:fromDegrees="0"

    android:toDegrees="360"

    android:pivotX="50%"

    android:pivotY="50%"

/>

rotate、scale动画的android:pivotX和android:pivotY属性、translate动画的android:toXDelta和android:toYDelta属性的取值都可以是都可以数值、百分数、百分数p,比如:50、50%、50%p,他们取值的代表的意义各不相同:

50表示以View左上角为原点沿坐标轴正方向(x轴向右,y轴向下)偏移50px的位置;

50%表示以View左上角为原点沿坐标轴正方向(x轴向右,y轴向下)偏移View宽度或高度的50%处的位置;

50%p表示以View左上角为原点沿坐标轴正方向(x轴向右,y轴向下)偏移父控件宽度或高度的50%处的位置(p表示相对于ParentView的位置)。

java代码中启动(以上四种补间动画的启动方式):

Animation translateAnimation = AnimationUtils.loadAnimation(this, R.anim.view_tran);
btTran.startAnimation(translateAnimation);

逐帧动画:

步骤: 1.将每一帧的图片放入drawable文件夹
2.设置xml文件,在java代码中启动
xml:



    

    


java代码中启动:

    ImageView  imgKnightAttack;

    imgKnightAttack.setImageResource(R.drawable.knight_attack);
    // 1. 设置动画

    animationDrawable = (AnimationDrawable)imgKnightAttack.getDrawable();

    // 2. 获取动画对象

    animationDrawable .start()和animationDrawable .stop()

同时视图动画可以设置动画执行监听器:


animation.setAnimationListener(new Animation.AnimationListener() {

    @Override    public void onAnimationStart(Animation animation) {

        // 动画开始    
    }

    @Override    public void onAnimationEnd(Animation animation) {

        // 动画结束    
    }

    @Override    public void onAnimationRepeat(Animation animation) {

        //动画重复    
    }

});

属性动画:

定义:控制属性来实现动画,和另外两个动画一样,既可以用xml来控制,也可以用java代码控制。启动也是java来控制
xml实现例子(view_attribute_animation):

    

    

通过android:propertyName来控制 是那种动画 和视图动画相同,分为四种,细分为以下几种 scaleY/scaleX;translationX/translationY;alpha;rotation;其他属性是在xml文件中有提示的。

组合动画 :

下面例子是 360度旋转着向x轴正方向位移200像素,然后再旋转着位移回原点,

然后执行第二段向反方向执行一次。


    

    android:ordering="sequentially">

    

        

        

        

         

            

    

    

        

        

            

            

            

    

    

默认为 together :set中的动画同时执行

    sequentially :set中的动画顺序执行


java代码中启动:
    Animator  animator = AnimatorInflater.loadAnimator(this,     R.anim.view_attribute_animation);

    animator.setTarget(imgAttribute);

    animator.start();

java代码形式
第一个参数是要绑定的组件 实例化的名字例如 ImageView imageView;第二个参数是要实现的动画名细分scaleY/scaleX;translationX/translationY;alpha;rotation;第三第四个,代表执行的动画效果,同时,可以加更多参数,代表该动画执行多次

ObjectAnimatoranimator=ObjectAnimator.ofFloat(imageView,"alpha",1f,0f);

animator.setDuration(1000);//时间1s

animator.start();

同时例如在旋转的时候,第三,第四个写的 如果前面的比后面的大,那么久代表逆时针(360f,0f 这表示逆时针旋转),移动同理,前面比后面大,代表负方向移动。

补间动画和属性动画的区别
如果需求只是对View进行移动,缩放,旋转和淡入淡出的操作,补间动画就足够了,但是如果超出就没法了,而且补间动画最大的缺陷就是只改变了View的显示效果,而没有改变真正的显示效果,没有真正改变View的属性(例如在动画执行结束后,对组件执行点击事件,无反应)。

你可能感兴趣的:(android动画)