本文译自:http://developer.android.com/training/animation/crossfade.html

淡入淡出动画(也可以作为溶解动画)是指在渐渐的淡出一个UI组件的同时,淡入另外一个UI组件。这种动画适用于应用程序中内容或View之间的切换。淡入淡出虽然非常细微和短暂,但却给屏幕间切换提供了连续平滑的变换。如果不使用它们,屏幕间的切换经常会让人感到突然或匆忙。

创建淡入淡出视图

创建两个要淡入淡出的视图,以下示例创建了一个进度指示和一个可滚动的文本视图:

<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

<TextView style="?android:textAppearanceMedium"
            android:lineSpacingMultiplier="1.2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/lorem_ipsum"
            android:padding="16dp" />

</ScrollView>

<ProgressBar android:id="@+id/loading_spinner"
        style="?android:progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />

</FrameLayout>

建立动画

1. 给要淡入淡出的View创建成员变量。在稍后的编辑动画期间的View时,要使用这些变量。

2. 对于要淡入的View,把它的可见性设置为GONE。这会防止这个View占据布局空间,并在布局计算中忽略它,这样会加快处理进度。

3. 在一个成员变量中缓存config_shortAnimTime系统属性。这个属性定义动画持续时间为”short”。对于细微的动画或频繁发生的动画,使用这个设置是一个理想的选择。还可以使用的设置有config_longAnimTimeconfig_mediumAnimTime.

下例代码使用了上面的布局文件作为Activity的内容视图:

publicclassCrossfadeActivityextendsActivity{

private View mContentView;
    private View mLoadingView;
    private intmShortAnimationDuration;

...

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_crossfade);

mContentView = findViewById(R.id.content);
        mLoadingView = findViewById(R.id.loading_spinner);

// Initiallyhide the content view.
        mContentView.setVisibility(View.GONE);

// Retrieveand cache the system's default "short" animation time.
        mShortAnimationDuration = getResources().getInteger(
                android.R.integer.config_shortAnimTime);
    }

淡入淡出视图

至此,视图被正确的建立了,以下是淡入淡出它们的步骤:

1. 对于要淡入的View,把它的透明度设置为0,并且要把可见性设置为VISIBLE(记住:它的初始设置是GONE),这会让该View可见,但完全透明。

2. 对于要淡入的View,把动画透明度设置为从0到1。同时,对于要淡出的View,要把动画的透明度设置为从1到0。

3. 在Animator.AnimatorListener中使用onAnimationEnd()方法中,把要淡出的View的可见性设置为GONE。即使透明度设置为0,也要把它的可见性设置为GONE,这会防止对布局空间的占用,并且会忽略对它的布局计算,从而提高处理速度。

以下示例展示如何完成淡入淡出操作:

privateViewmContentView;
private View mLoadingView;
private int mShortAnimationDuration;

...

private void crossfade() {

// Set the content view to0% opacity but visible, so that it is visible
    // (but fully transparent)during the animation.
    mContentView.setAlpha(0f);
    mContentView.setVisibility(View.VISIBLE);

// Animate the contentview to 100% opacity, and clear any animation
    // listener set on theview.
    mContentView.animate()
            .alpha(1f)
            .setDuration(mShortAnimationDuration)
            .setListener(null);

// Animate the loadingview to 0% opacity. After the animation ends,
    // set its visibility toGONE as an optimization step (it won't
    // participate in layoutpasses, etc.)
    mHideView.animate()
            .alpha(0f)
            .setDuration(mShortAnimationDuration)
            .setListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                   mHideView.setVisibility(View.GONE);
                }
            });
}

Android---两个视图间的淡入淡出的更多相关文章

  1. 【Android Developers Training】 69. 视图切换的淡入淡出效果

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  2. Android 两个界面间快速切换时,会发现有短暂黑屏

    这种问题一般是因为一个Activity启动之后在显示视图之间时间太长导致的. 1.优化方式可以通过精简layout文件.多线程处理数据载入等. 2.但是有些Activity的layout文件可能比较大 ...

  3. Android Developers:两个视图渐变

    淡入淡出动画(也被称为渐隐)逐渐淡出一个UI组件,同时淡入另一个.这个动画在你想在你的应用程序中切换内容或者是视图的情况下非常有用.淡入淡出非常微妙并短,但支持从一个屏幕到下一个屏幕流畅的过渡.当你不 ...

  4. Android动画之淡入淡出

    为了更好的说明Android动画的淡入淡出效果,这里以一个场景为例: 界面上有两个View 控件,两个View交替显示,当一个View淡入显示,另一个View淡出不可见. 我们把当前要显示的View叫 ...

  5. [转]Android UI:看看Google官方自定义带旋转动画的ImageView-----RotateImageView怎么写(附 图片淡入淡出效果)

    http://blog.csdn.net/yanzi1225627/article/details/22439119 众所周知,想要让ImageView旋转的话,可以用setRotation()让其围 ...

  6. [Android]异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3574131.html  这个可以实现ImageView异步加载 ...

  7. Android 四种简单的动画(淡入淡出、旋转、移动、缩放效果)

    最近在Android开发当中,用到的动画效果. public void onClick(View arg0) { // TODO 自动生成的方法存根 switch (arg0.getId()) { c ...

  8. ListView的淡入淡出和Activity的淡入淡出补间动画效果Animation

    //=========主页面======================= package com.bw.lianxi7; import android.os.Bundle;import androi ...

  9. laravel5.5框架中视图间如何共享数据?视图间共享数据的两种方法

    laravel框架中视图间共享数据有两种,一种是用视图门面share()方法实现,另一种是用视图门面composer() 方法实现,那么,两种方法的实现究竟是怎样的呢?让我们来看一看接下来的文章内容. ...

随机推荐

  1. Java GUI使用exe4j打包exe文件

    exe4j下载地址:http://blog.csdn.net/cciii/article/details/17083531 1.  在MyEclipse将java项目打包成可执行jar文件.项目结构如 ...

  2. Ch02 从零开始实例学习5

    演练:添加模型 原文链接:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-model ...

  3. linux配置ssh+rsync

    ssh  远程登录 sftp    文件共享 类似ftp  ssh  secure file transfer client scp    文件共享 类似cp   ssh配置文件 /etc/ssh/s ...

  4. MinGW 介绍

    SDL新手教程(一):3.MinGW 下的安装与设置 作者:龙飞 3.1:MinGW 是什么? MinGW 提供了一套简单方便的Windows下的基于GCC 程序开发环境.MinGW 收集了一系列免费 ...

  5. CentOS6.4 安装 Oracle11g

    1.硬件要求检查: 1.1 内存要求: 内存大于1G(使用虚拟机安装时内存要稍微大一些,否则安装检查不通过) #cat /proc/meminfo //查看内存大小 1.2 交换分区要求: 交换分区是 ...

  6. javascript 回调函数应用

    回调函数是什么在学习之前还真不知道js回调函数怎么使用及作用了,下面本文章把我在学习回调函数例子给各位同学介绍一下吧,有需了解的同学不防进入参考. 回调函数原理: 我现在出发,到了通知你”这是一个异步 ...

  7. pygame编写贪吃蛇

    一直想用pygame做一个小游戏的,可是因为拖延症的缘故一直没有动,结果那天看到了一个12岁的国际友人小盆友用pygame做的一款塔防游戏,突然感觉已经落后超级远了,所以心血来潮做小游戏了.高中陪伴我 ...

  8. Swift - 使用socket进行通信(附聊天室样例)

    在Swift开发中,如果我们需要保持客服端和服务器的长连接进行双向的数据通信,使用socket是一种很好的解决方案. 下面通过一个聊天室的样例来演示socket通信,这里我们使用了一个封装好的sock ...

  9. Swift - 字符串(String)用法详解

    下面对String常用的属性和方法做个总结 1,判断是否为空:isEmpty 1 2 3 var str:String if str.isEmpty{ } 2,获取字符数量:countElements ...

  10. WindowsPhone8中实现圆形图片的生成显示

    原文 WindowsPhone8中实现圆形图片的生成显示 很多软件中(比如QQ)用到了许多圆形图片,作为用户头像等等,原始图片往往是方形的,那么怎么样将方形的图片显示成圆形呢? 一种方法是当背景为固定 ...