Android 视图动画一(TweenAnimation)

  • Tween animation补间动画,主要是通过对控件实现透明度(alpha)、尺寸(scale)、位置(translate)、旋转rotate)进行改变,通过集合(set)的方式,实现连续的动画效果
  • Frame animation
Android 视图动画一(TweenAnimation)_第1张图片

Tween动画

1、直接子类

  1. AlphaAnimation;控制一个对象的透明度播放的动画
  2. RotateAnimation;控制一个对象旋转的动画
  3. ScaleAnimation;控制一个对象尺寸的动画
  4. TranslateAnimation;控制一个对象位置的动画

2、监听器

animation.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {
            
        }

        @Override
        public void onAnimationEnd(Animation animation) {

        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }
 });

3、属性及其对应方法(所有子类都拥有)

  • android:detachWallpaper: 是否在壁纸上运行

  • android:duration: 动画时长,单位毫秒。

  • android:fillAfter: 设置为true,控件动画结束时将保持动画最后一帧(xml文件中,需要设置在set便签才生效)。

  • android:fillBefore: 设置为true,控件动画结束时将保持动画开始第一帧(感觉很坑爹,设置true和false还有删除这个属性,效果都一样)。

  • android:fillEnabled: 效果和fillBefore一样(同样坑爹,经测试这个属性可有可无,求打脸。

  • android:interpolator: 插值器。设置动画速率的变化(譬如加速、减速、匀速等),后面详说。

  • android:repeatCount: 动画重复次数

  • ndroid:repeatMode: 重复模式,有reverse(倒序)和restart(重复)两种,必须配合repeatCount一起使用

  • android:startOffset: 延迟一定毫秒之后才开始动画

  • android:zAdjustment: 表示被设置动画的内容在动画运行时在Z轴上的位置,有以下三个值

    • normal 默认值,保持内容在Z轴上的位置不变
    • top 保持在Z周最上层
    • bottom 保持在Z轴最下层

4、Interpolator

主要实现动画的速率变化,interpolator作为一个接口,然后抽象类BaseInterpolator实现Interpolator接口,在BaseInterpolator的子类就是android一系列Android提供的插值器。

用法:

  1. 在XML的标签下设置:android:interpolator=”@android:anim/accelerate_decelerate_interpolator”
  2. 在JAVA代码中使用:animation.setInterpolator(new AccelerateDecelerateInterpolator());

以下提供android 所有的插值器

  • AccelerateDecelerateInterpolator:开始和结束速度慢,中间部分加速
  • AccelerateInterpolator:开始缓慢,然后加速
  • AnticipateInterpolator:开始后退,然后前进
  • AnticipateOvershootInterpolator:开始后退,然后前进,直到超出目标值,再后退至目标值
  • BounceInterpolator:在结束时弹跳
  • CycleInterpolator:在指定的周期内重复动画,速度变化遵循正弦规律
  • DecelerateInterpolator:开始加速,结束缓慢
  • LinearInterpolator:匀速
  • OvershootInterpolator:前进,直到超出目标值,再后退至目标值
  • PathInterpolator: 根据路劲变化改变速率

5、AnimationSet

在res/anim/.xml文件下实现多种动画(透明度、尺寸、位置、旋转)

6、相关代码实现

  • java代码实现动画

        private void alpha() {
          AlphaAnimation alphaAnimation = new AlphaAnimation(1.0f, 0.0f);
          alphaAnimation.setDuration(2000);
          alphaAnimation.setFillAfter(true);
          imv.setAnimation(alphaAnimation);
          //imv.startAnimation(alphaAnimation);
      }
    
      private void rote() {
          RotateAnimation rotateAnimation = new RotateAnimation(0, 720f);
          rotateAnimation.setDuration(2000);
          rotateAnimation.setFillAfter(true);
          imv2.setAnimation(rotateAnimation);
      }
      private void scale() {
          ScaleAnimation scaleAnimation = new ScaleAnimation(0f, 2f, 0f, 3f);
          scaleAnimation.setDuration(3000);
          scaleAnimation.setFillAfter(true);
          imv.setAnimation(scaleAnimation);
      }
    
      private void translate() {
          TranslateAnimation  animation = new TranslateAnimation(0f, 200f, 0f, 300f);
          animation.setDuration(3000);
          animation.setFillAfter(true);
          imv.setAnimation(animation);
    
      }
    
  • xml实现动画

      
      
          
      
          
      
              
      
              
          
      
      
    
  • java中引用res文件

         private void animationSet(){
            Animation animation = AnimationUtils.loadAnimation(getActivity(), R.anim.animation_set);
            imv.startAnimation(animation);
    
        }

你可能感兴趣的:(Android 视图动画一(TweenAnimation))