• 动画的组合


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

      

    布局:

     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:1.0.1@aar'
    3 compile 'com.daimajia.androidanimations:library:1.1.3@aar'

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

     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     }

      

  • 相关阅读:
    Linux-KVM, QEMU, Virtualbox, VMWare
    Linux环境下查看CPU是否支持VT虚拟化
    (OK) Phoronix Test Suite
    GNS3: Qemu or VirtualBox?
    Android x86 On Qemu
    ARC Welder——Android 模拟器——App Runtime for Chrome
    Running Android apps using Docker and ARC Welder
    使用Docker编译Android(AOSP)
    Android —— releases of AOSP
    (OK) install android-x86-5.1 on virtualbox
  • 原文地址:https://www.cnblogs.com/aimqqroad-13/p/7109911.html
Copyright © 2020-2023  润新知