基于注解的动画框架使用

       首先上github地址链接https://github.com/facetome/QuickAnimation 

       android中使用注解主要有两种方式,一种是运行时注解,也就是在代码逻辑运行的时候通过反射的方式动态的获取。另一种则是编译时注解,顾名思义,则是在android studio进行代码编译的时候使用的一种注解方式,比如ButterKnife、Dagger等,今天我们主要讲的就是基于编译时注解的动画框架。

      implementation 'com.basic.animation:animation_core:1.0.0'
      implementation 'com.basic.animation:animation_annotation:1.0.0'
      annotationProcessor 'com.basic.animation:annotation_processor:1.0.0'

    首先肯定是引入注解框架,其次再是使用,在正式使用之前,我们先说下android关于动画的问题,动画大致可以分为3类,分为属性动画,view动画,和帧动画,这里的QuickAnimation 主要针对的是view动画和属性动画。

      我们一般情况下,不管使用属性动画还是view动画,都需要使用到一大堆的动画api,先实例化一个动画对象,然后设置各种动画参数属性,包括时间、加速器、重复次数、起始位置等等,比如实现一个平移动画需要以下代码:

     

         TranslateAnimation translate = new TranslateAnimation(0, 200,0, 0);
         translate.setDuration(1000);
         translate.setFillAfter(true);
         translate.setInterpolator(new LinearInterpolator());
         translate.setStartOffset(1000);
         title.startAnimation(translate);

       如果有多个动画的情况下就将要进行重复编写类似的代码块多次,代码结构臃肿,同时耗时耗力,而使用注解框架则可以有效地避免这个问题,具体如下:

         

        @Interpolator(DecelerateInterpolator.class)
        @AnimationParams(duration = 1000, delayTime = 1000)
        @Translate(fromX = 0, toX = 200, fromY = 0, toY = 0)
        TextView translate;

      以上代码同样可以达到将一个view进行x轴上平移200个像素的目的,而且更加简洁,只需要简单的加上几个注解即可。在添加完注解之后,我们只需要将工程make一下,则注解器会自动为当前使用注解动画的activity生成动画类,比如TestActivity_Generator.class,和当前控件对应的动画方法,比如以上translate变量,则会对应生成playTranslateAnimations(TestActivity activity);方法,然后我们只需要在需要开始进行动画的地方简单的进行一次调用即可:

       AnnotationTestActivity1_Generator.playTranslateTranslate(this)

       这里的方法命名是按照play_view变量名_动画类型来进行的,比如上面playTranslateTranslate则是代表了view变量为Translate的平移Translate方法。

     或许有些同学有些其他想法,比如我想一个view控件上同时进行多个动画怎么办?这很简单,注解框架已经帮我们实现了这一功能,比如我们想要实现平移的时候,进行透明度变化,只需要在对应的view变量上再次注解一个@Alpha即可。例:

       

      @Interpolator(DecelerateInterpolator.class)
      @AnimationParams(duration = 1000, delayTime = 100)
      @Translate(fromX = 0, toX = 100, fromY = 0, toY = 100)
      @Alpha(fromAlpha = 1f, toAlpha = 0.5f)
      TextView translate;

      记住每次更新了注解之后都需要进行一次make,保证生成了新的生成类和方法。

      框架一共提供了十个注解类,包括Alpha(透明度)、AnimationParams(动画公共参数)、Animator(属性动画)、Animators(属性动画集)、Interpolator(加速器)、ResourceAnimation(通过xml方式)、Rolate(旋转)、Sclae(缩放)、Translate(平移)、TypeEvaluator(估值器),这是个动画基本覆盖了平常使用的基础动画场景,这里不一一对每个注解器的使用进行介绍,有兴趣的可以去通过github上的实例进行了解。另外注解器方式未能提供对动画的监听功能,后续会继续加上,如果你当前想要实现对动画的监听,那就只能使用代码监听的方式了。当前框架考虑到注解方式目前的局限性,所以也提供了代码api调用方式如下:

       

      QuickAnimation.with(this)
            .repeatMode(QuickAnimation.REVERSE)
            .repeatCount(1)
            .duration(1000)
            .delay(500).interpolator(new AccelerateInterpolator())
            .callback(new OnAnimationCallback<BaseAnimation>() {
              @Override
              public void onStart(BaseAnimation animation) {
                   Log.d("basic", "onstart");
              }

              @Override
              public void onEnd(BaseAnimation animation) {
                  Log.d("basic", "onEnd");
              }

               @Override
              public void onCancel(BaseAnimation animation) {
                  Log.d("basic", "onCancel");
              }

              @Override
              public void onRepeat(BaseAnimation animation) {
                 Log.d("basic", "onRepeat");
              }
        })
        .asObjectAnimator("TranslationX").setFloatValues(0, 100, 200)
        .create()
        .play(view);
    当前使用链式调用的api列表过于复杂,参数较多,后续会进行一些精简使用。好了,关于对动画注解框架的使用介绍就介绍到这里,如果大家有兴趣,可以参照demo进行使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值