欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 属性动画实现效果

程序员文章站 2022-07-05 22:48:34
本来想先放实现效果,后来手机实在捉急,只能后续再补啦。 一 实现透明效果: //属性动画变透明 private void alphaAnim(){...

本来想先放实现效果,后来手机实在捉急,只能后续再补啦。
一 实现透明效果:

//属性动画变透明
    private void alphaAnim(){
        //不透明--->透明--->不透明 2s钟时间平均分配
        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"alpha",1f,0f,1f);
        //从不透明变成透明
//        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"alpha",1f,0f);
        //只执行一次动画时,可以省略1f
//        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"alpha",0f);
        objectAnimator.setDuration(2000);  //设置动画时间为2000ms
        objectAnimator.start();
    }

1f为完全不透明   0f为完全透明

二:实现旋转效果

//属性动画 旋转
    private void rotationAnim(){
        //0-->360 顺时针 360-->0 逆时针
        //下个度数大于上个度数,顺时针旋转;下个度数小于上个度数,逆时针旋转。
        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"rotation",0f,360,0);
        objectAnimator.setDuration(5000);
        objectAnimator.start();
    }

三 实现平移效果:

//平移
    private void translationAnim(){
        // translationX 沿着x轴移动 上个数大于下个数,左移。反之右移
//        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"translationX",0f,-300f,0f);  //左移-->右移
        // translationX 沿着x轴移动 上个数大于下个数,上移。反之下移
        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"translationY",0f,300f,0f);  //下移-->上移
        objectAnimator.setDuration(5000);
        objectAnimator.start();
    }

四 实现缩放效果

//缩放
    private void scaleAnim(){
        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"scaleX",1f,2f,1f); //沿着x轴放大两倍再返回
        ObjectAnimator objectAnimator1=ObjectAnimator.ofFloat(imageView,"scaleY",1f,2f,1f); //沿着Y轴放大两倍再返回
        objectAnimator.setDuration(5000);
        objectAnimator1.setDuration(5000);
        objectAnimator.start();
        objectAnimator1.start();
    }

五 组合动画
以上都是基本动画,如果只有基本动画,显然是不够的,所以还有个类AnimatorSet,专门来组合这些动画。
AnimatorSet:这个类提供了一个play()方法,调用后将会返回一个AnimatorSet.Builder的实例,AnimatorSet.Builder中包括以下四个方法:

after(Animator anim) :将现有动画插入到传入的动画之后执行
after(long delay) :将现有动画延迟指定毫秒后执行
before(Animator anim): 将现有动画插入到传入的动画之前执行
with(Animator anim) :将现有动画和传入的动画同时执行

//组合动画
    private void setAnim(){
        //沿x轴放大
        ObjectAnimator scaleXAnimator = ObjectAnimator.ofFloat(imageView, "scaleX", 1f, 2f, 1f);
        //沿y轴放大
        ObjectAnimator scaleYAnimator = ObjectAnimator.ofFloat(imageView, "scaleY", 1f, 2f, 1f);
        //移动
        ObjectAnimator translationXAnimator = ObjectAnimator.ofFloat(imageView, "translationX", 0f, 200f, 0f);
        //透明动画
        ObjectAnimator alphaAnimator = ObjectAnimator.ofFloat(imageView, "alpha", 1f, 0f, 1f);
        AnimatorSet animatorSet=new AnimatorSet();
        //同时沿X,Y轴放大,且改变透明度,然后移动
        //在3s内,沿x、y轴同时放大,然后缩小,在缩放的同时还要改变透明度。然后再完成3s的左右移动。
        animatorSet.play(scaleXAnimator).with(scaleYAnimator).with(alphaAnimator).before(translationXAnimator);
        //每个动画都设置成3s,也可以分别设置
        animatorSet.setDuration(3000);
        animatorSet.start();
    }

六 在xml中实现动画效果
1.透明:



    

在布局中的实现:

//alpha.xml对应的代码实现
    private void alphaXml(){
        Animator animator= AnimatorInflater.loadAnimator(this,R.animator.alpha);
        animator.setTarget(imageView);
        animator.start();
    }

2.旋转


3.移动


4.缩放:


5.组合:



    
        
        
            
            
        
    
    
        
        
            
            
        
    
这里需要说下set中的属性android:ordering:规定了这个set中的动画的执行顺序,包括:
together(默认):set中的动画同时执行
sequentially:set中的动画按顺序执行