Android开发之属性动画

Android动画主要分为3种

  • View动画(Android开发之View动画)
  • 帧动画(Android开发之帧动画)
  • 属性动画

何为属性动画?

通过改变对象的属性以达到动画的效果,API 11以上可以用,如果想兼容旧版本请使用 https://github.com/JakeWharton/NineOldAndroids 。属性动画的默认的时间为300ms,它可以在时间间隔内完成对象从一个属性值到另外一个属性值的改变。比较常用的属性动画对象有: ValueAnimatorObjectAnimatorAnimatorSet,其中ObjectAnimatorValueAnimator的子类,AnimatorSet代表动画集合。

如何使用?

首先布局和Activity的准备代码和之前一样,即在布局中放置一个ImageView,然后在程序中获取,接下来介绍几种常见动画的使用

1、平移动画
 /**
     * 1.5秒 将图像向Y轴正方向移动500,translationY可以换成translationX
     */
private void translateAni() {
        ObjectAnimator animator = ObjectAnimator.ofFloat(img, "translationY", 500);

        animator.setDuration(1500);

        animator.start();
}

测试运行

translate.gif

2、缩放动画
 /**
     * 1.5秒 将图像沿Y从1.0放大到1.5,注意这里属性值可以为scaleX和scaleY,但设置scale是不行的
     */
private void scaleAni() {
        ObjectAnimator animator = ObjectAnimator.ofFloat(img, "scaleY", 1, 1.5f);

        animator.setDuration(1500);

        animator.start();
}

测试运行

scale.gif

3、旋转动画
 /**
     * 1.5秒 将图像轴旋转360度
     */
private void rotateAni() {
        ObjectAnimator animator = ObjectAnimator.ofFloat(img, "rotation", 0, 360);

        animator.setDuration(1500);

        animator.start();
}

测试运行

rotate.gif

4、透明度动画
 /**
     * 1.5秒 将图像的透明度从1变到0.2
     */
private void alphaAni() {
        ObjectAnimator animator = ObjectAnimator.ofFloat(img, "alpha", 1, 0.2f);

        animator.setDuration(1500);

        animator.start();
}

测试运行

alpha.gif

5、动画集合
/**
     * 属性集合 将上述动画集合起来一起放一遍
     */
private void aniSet() {

        AnimatorSet set = new AnimatorSet();

        set.playTogether(
                ObjectAnimator.ofFloat(img, "translationY", 500),
                ObjectAnimator.ofFloat(img, "scaleY", 1, 1.5f),
                ObjectAnimator.ofFloat(img, "scaleX", 1, 1.5f),
                ObjectAnimator.ofFloat(img, "rotation", 0, 360),
                ObjectAnimator.ofFloat(img, "alpha", 1, 0.2f)
        );


        set.setDuration(3000);

        set.start();
}

测试运行

set.gif

6、颜色渐变动画

这种方式比较坑,试了很多种,按上面那些方式行不通,最后想到这个应该是属于任意属性的范畴,所以采用了ValueAnimator,监听动画过程,自己来实现属性的改变,果然成功了:

 // 颜色渐变动画 这个要注意 无法直接采用上面的方法直接来设置 设置了也是无效的 这里涉及到给任意属性设置动画的问题
private void colorAni(int startColor, int endColor) {

        ValueAnimator valueAnimator = ValueAnimator.ofArgb(startColor, endColor);

        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {

                //找到Activity的默认View
                View view = ((ViewGroup) findViewById(android.R.id.content)).getChildAt(0);

                //改变背景色
                view.setBackgroundColor((Integer) valueAnimator.getAnimatedValue());

            }
        });

        valueAnimator.setDuration(3000);
        valueAnimator.start();
}

测试运行

backgroundColor.gif

代码地址

https://github.com/yungfan/propertyAnim

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏androidBlog

Android打造不一样的新手引导页面(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/...

701
来自专栏非著名程序员

AutoFlowLayout-多功能流式布局与网格布局控件

近期工作需要用到流式布局,网上也有很多关于这方面的资料。发现流式布局与网格布局的自定义很有意思,是学习自定义控件的一个很好的方式,所以就撸了个几百行代码的控件,...

39010
来自专栏Android开发指南

Android自定义控件总结

3787
来自专栏Sorrower的专栏

动画必须有(二):悬浮菜单了解一下!

2583
来自专栏Android中高级开发

Android开发之漫漫长途 番外篇——自定义View的各种姿势1

该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列。该系列引用了《Android开发艺术探索...

1131
来自专栏学海无涯

Android开发之Scroller

什么是Scroller? 翻译为弹性滑动对象,可以实现View的弹性滑动动画,与Scroller相关的就是大家比较熟悉的scrollTo和scrollBy方法,...

3955
来自专栏向治洪

墨迹天气3.0引导动画

 实现墨迹天气向上滑动的viewpager使用的开源库ViewPager-Android。ViewPager-Android开源库设置app:orientati...

2597
来自专栏移动开发的那些事儿

Android界面绘制原理

从普遍的意义上来讲,以上这段代码就是设置WindowManager和DecorView的关系,继续看:

1621
来自专栏青蛙要fly的专栏

项目需求讨论-自定义滚轮

大家好,这次又是到了实际的项目需求讨论时间,我的一些文章下面,有时候有人评论,求源码,求Demo,我的主张是仔细看文章,自己理解了再写一遍,会懂得更多。大部分人...

1112
来自专栏Android小菜鸡

Touch事件实现View拖动

  Touch监听事件可以监听手指在屏幕上的行为,例如按下、滑动。抬起。根据这些事件,可以做出View任意推动的效果。

1771

扫码关注云+社区

领取腾讯云代金券