动画的组合

在浏览网站或者应用时,会发现一些比较好看的动画。写这篇文章主要是记录下一个思想,炫酷的动画需要组合实现,时机和动画的配合。上个示例:

布局:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3              xmlns:tools="http://schemas.android.com/tools"
 4              android:layout_width="match_parent"
 5              android:layout_height="match_parent"
 6              android:background="@color/material_blue_500"
 7              tools:context=".mvp.ui.activities.SplashActivity">
 8
 9     <ImageView
10         android:id="@+id/logo_outer_iv"
11         android:layout_width="120dp"
12         android:layout_height="wrap_content"
13         android:layout_gravity="center"
14         android:src="@drawable/ic_launcher_outer"/>
15
16     <ImageView
17         android:id="@+id/logo_inner_iv"
18         android:layout_width="120dp"
19         android:layout_height="wrap_content"
20         android:layout_gravity="center"
21         android:src="@drawable/ic_launcher_inner"
22         tools:alpha="1"/>
23
24     <TextView
25         android:id="@+id/app_name_tv"
26         android:layout_width="wrap_content"
27         android:layout_height="wrap_content"
28         android:layout_gravity="center"
29         android:layout_marginTop="80dp"
30         android:alpha="0"
31         android:text="@string/app_name"
32         android:textColor="@color/white"
33         android:textSize="@dimen/medium"
34         tools:alpha="1"/>
35 </FrameLayout>

这个Splash呈现的动画分为三个部分,

(1) NEW字样图

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <set xmlns:android="http://schemas.android.com/apk/res/android"
 3      android:duration="1000"
 4      android:interpolator="@android:anim/accelerate_interpolator">
 5
 6     <translate
 7         android:fromYDelta="-100%p"
 8         android:toYDelta="0%"/>
 9     <scale
10         android:fromXScale="0.0"
11         android:fromYScale="0.0"
12         android:pivotX="50%"
13         android:pivotY="50%"
14         android:toXScale="1.0"
15         android:toYScale="1.0"/>
16     <alpha
17         android:fromAlpha="0.5"
18         android:toAlpha="1"/>
19
20 </set>

 调用:

1 Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim_top_in);
2 mLogoInnerIv.startAnimation(animation);

说明:

 1 pivotX 属性为动画相对于物件的X坐标的开始位置,可以设置为数字
 2 pivotY 属性为动画相对于物件的Y坐标的开始位置
 3
 4 这里的pivotX和pivotY,可以设置为数字,百分比,或者百分比p,例如分别都把两个参数
 5
 6 - 设置为50时,旋转点为View的左上角的原点在x方向和y方向加上50px的点。在Java代码里面设置这个参数的对应参数是Animation.ABSOLUTE。
 7
 8 - 设置为50%时,旋转点为View的左上角的原点在x方向加上自身宽度50%和y方向自身高度50%的点。在Java代码里面设置这个参数的对应参数是Animation.RELATIVE_TO_SELF。
 9
10 - 设置为50%p时,旋转点为View的左上角的原点在x方向加上父控件宽度50%和y方向父控件高度50%的点。在Java代码里面设置这个参数的对应参数是Animation.RELATIVE_TO_PARENT。

(2) 绿色方块

(3) AppName - 淡入

  这个两个动画是使用了一个库来实现的,选择你想要的效果去组合实现:

1 compile ‘com.nineoldandroids:library:2.4.0‘
2 compile ‘com.daimajia.easing:library:[email protected]‘
3 compile ‘com.daimajia.androidanimations:library:[email protected]‘

实现示例动画的完整代码:

 1 private void initAnimation() {
 2         startLogoInner1();
 3         startLogoOuterAndAppName();
 4     }
 5
 6     private void startLogoInner1() {
 7         Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim_top_in);
 8         mLogoInnerIv.startAnimation(animation);
 9     }
10
11     private void startLogoOuterAndAppName() {
12         final ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);
13         valueAnimator.setDuration(1000);
14         valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
15             @Override
16             public void onAnimationUpdate(ValueAnimator animation) {
17                 float fraction = animation.getAnimatedFraction();
18                 KLog.d("fraction: " + fraction);
19                 if (fraction >= 0.8 && !isShowingRubberEffect) {
20                     isShowingRubberEffect = true;
21                     startLogoOuter();
22                     startShowAppName();
23                     finishActivity();
24                 } else if (fraction >= 0.95) {
25                     valueAnimator.cancel();
26                     startLogoInner2();
27                 }
28
29             }
30         });
31         valueAnimator.start();
32     }
33
34     private void startLogoOuter() {
35         YoYo.with(Techniques.RubberBand).duration(1000).playOn(mLogoOuterIv);
36     }
37
38     private void startShowAppName() {
39         YoYo.with(Techniques.FadeIn).duration(1000).playOn(mAppNameTv);
40     }
41
42     private void startLogoInner2() {
43         YoYo.with(Techniques.Bounce).duration(1000).playOn(mLogoInnerIv);
44     }
时间: 2024-08-07 04:08:29

动画的组合的相关文章

Android Animation动画详解(二): 组合动画特效

前言 上一篇博客Android Animation动画详解(一): 补间动画 我已经为大家介绍了Android补间动画的四种形式,相信读过该博客的兄弟们一起都了解了.如果你还不了解,那点链接过去研读一番,然后再过来跟着我一起学习如何把简单的动画效果组合在一起,做出比较酷炫的动画特效吧. 一. 动画的续播 如题,大家想想,如果一个页面上包含了许多动画,这些动画要求按顺序播放,即一个动画播放完成后,继续播放另一个动画,使得这些动画具有连贯性.那该如何实现呢? 有开发经验或者是逻辑思维的人肯定会想,对

CABasicAnimation 动画组合

使用CAAnimationGroup类进行复数动画的组合.代码如下: /* 动画1(在X轴方向移动) */CABasicAnimation *animation1 =    [CABasicAnimation animationWithKeyPath:@"transform.translation.x"]; // 终点设定animation1.toValue = [NSNumber numberWithFloat:80];; // 終点  /* 动画2(绕Z轴中心旋转) */CABas

iOS动画的要素

1)iOS动画的模型:三层树模型: https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreAnimation_guide/CoreAnimationBasics/CoreAnimationBasics.html#//apple_ref/doc/uid/TP40004514-CH2-SW12 Layer Trees Reflect Different Aspects of the Animati

Android开发实战之补间动画和属性动画

说起动画,其实一点也不陌生,在使用一款app的时候为了优化用户体验,多多少少的,都会加入动画. 安卓中的动画,分为两大类:补间动画和属性动画.本篇博文会详细介绍总结这两大动画,希望本篇博文对你的学习和生活有所帮助. **补间动画** 补间动画分为四类:平移动画,旋转动画,缩放动画和渐变动画.这几类动画用法都差不多,只是对象参数不同这里我统一展示出来.以下是效果图: 实现代码很简单: btn1.setOnClickListener(new View.OnClickListener() { @Ove

Android动画--帧动画和补间动画

帧动画 首先我们定义在drawable文件夹下定义一个xml文件 里面包含我们要播放的动画的图片,以及每一帧动画的播放的时长 <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@mi

iOS Core Animation Advanced Techniques-显式动画

上七章节: 图层树 图层的寄宿图 图层几何学 图层视觉效果 图层变换 专用图层 隐式动画 这篇随笔主要介绍有关图层显式动画. 显示动画: 能对一些属性做指定的自定义动画,或者创建非线性动画 属性动画: 属性动画作用于图层的某个单一属性,并指定了它的一个目标值,或一连串将要做动画的值 属性动画分两种: 1.基础 2.关键帧 基础动画:(通过CALayer的实例方法addAnimation: forKey:给图层添加显示动画) CABasicAnimation-->CAPropertyAnimati

通过硬件层提高Android动画的性能

曾有许多人问我为什么在他们开发的应用中,动画的性能表现都很差.对于这类问题,我往往会问他们:你们有尝试过在硬件层解决动画的性能问题么? 我们都知道,在播放动画的过程中View在每一帧动画的显示时重绘自身.但如果你使用 View layer,使得View被渲染一次后就放到一个屏幕外的缓冲区中(即 layer),让View不断被重用,而不是一次又一次的重绘的话,这类动画性能问题就迎刃而解了. 此外,硬件层对图像的处理都会在GPU上进行缓存,使得我们在播放动画的过程中对View的特定操作的执行效率更高

Android动画

动画分为两类: 补间动画(Tween)和帧动画(Frame),补间动画是又一帧经过透明度.旋转.位移等变化而来.而帧动画则是由一帧帧连接起来的. 补间动画主要有一下几种类: AlphaAnimation .RotateAnimation .ScaleAnimation .TranslateAnimation AnimationSet 是前面几种补间动画的组合 补间动画的应用: 1定义:两种方式,一种是在XML文件里面定义,另一种是直接用代码创建 ① 用XML文件定义 <?xml version=

iOS核心动画

iOS开发系列--让你的应用“动”起来 --iOS核心动画 概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画.动画组.转场动画,如何通过UIView的装饰方法对这些动画操作进行简化等.在今天的文章里您可以看到动画操作在iOS中是如何简单和高效,很多原来想做但是苦于没有思路的动画在iOS中将变得越发简单: CALayer CALayer简介 CAL