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

下面是从一个进度指示器到一些文本内容渐变的例子。

如果你想跳过并查看一个完整的工作示例,下载并运行这个实例应用,并选着渐变例子。查看下面的文件的代码实现:

  • src/CrossfadeActivity.java

  • layout/activity_crossfade.xml

  • menu/activity_crossfade.xml

创建视图

————————————————————————————————————————————-------------------------------------------------------——

创建两个你想渐变的视图。下面的例子创建了一个过程指示器和一个滑动文本视图:

<FrameLayout xmlns: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. 创建你想渐变的视图的成员变量。你稍后在动画过程中修改视图时需要这些引用。

  2. 对于淡入的视图,设置它的可见性为GONE。它阻止了视图占用布局控件,并在布局计算中忽略它,加快处理时间。

  3. 在一个成员变量中缓存config_shortAnimTime系统属性。这个属性定了一个标准的“短”动画的时间段。这个时间对于微妙的动画或者经常发生的动画是理想的。如果你想使用它们,config_longAnimTime和config_mediumAnimTime也是有效的。

下面是一个例子,使用前面代码块的布局作为Activity的内容视图:

public class CrossfadeActivity extends Activity { 

   private View mContentView;
private View mLoadingView;
private int mShortAnimationDuration; ... @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); // Initially hide the content view.
mContentView.setVisibility(View.GONE); // Retrieve and cache the system's default "short" animation time.
mShortAnimationDuration = getResources().getInteger(
android.R.integer.config_shortAnimTime);
}

淡入淡出视图

——————————————————————————————————————————————————--------------———————————

现在这个试图是正确的设置,通过执行下面的操作渐入渐出它们:

  1. 对于渐入的视图,从0到可见性VISIBLE设置透明度值.(记住它初始化为GONE.)它会使的这个视图可见但是完全透明.

  2. 对于渐入的视图,推动它的透明值从0到1.在这个时候,对于这个渐出的视图,推动它的透明值从1到0.

  3. 在一个Animator.AnimatorListener中使用nonAnimationEnd()方法,设置淡出为GONE的视图的可见性。即使alpha值为0 ,设置这个视图的可见性为GONE来阻止视图占用布局空间,并在布局计算器的时候忽略它,加快处理。

下面的方法显示了如何执行这个的例子:

private View mContentView;
private View mLoadingView;
private int mShortAnimationDuration; ... private void crossfade() { // Set the content view to 0% opacity but visible, so that it is visible
// (but fully transparent) during the animation.
mContentView.setAlpha(0f);
mContentView.setVisibility(View.VISIBLE); // Animate the content view to 100% opacity, and clear any animation
// listener set on the view.
mContentView.animate()
.alpha(1f)
.setDuration(mShortAnimationDuration)
.setListener(null); // Animate the loading view to 0% opacity. After the animation ends,
// set its visibility to GONE as an optimization step (it won't
// participate in layout passes, etc.)
mHideView.animate()
.alpha(0f)
.setDuration(mShortAnimationDuration)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mHideView.setVisibility(View.GONE);
}
});
}

Android Developers:两个视图渐变的更多相关文章

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

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

  2. 【Android Developers Training】 72. 缩放一个视图

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

  3. 【Android Developers Training】 65. 应用投影和相机视图

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

  4. 【Android Developers Training】 71. 显示翻牌动画

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

  5. 【Android Developers Training】 63. 定义形状

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

  6. 【Android Developers Training】 62. 搭建一个OpenGL ES环境

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

  7. 【Android Developers Training】 61. 序言:使用OpenGL ES显示图像

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

  8. 【Android Developers Training】 9. 覆盖于布局之上的Action Bar

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

  9. 【Android Developers Training】 8. 定义Action Bar风格

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

随机推荐

  1. Codeforces 474F - Ant colony

    注意到每个区间生存下来的蚂蚁的长度等于区间的gcd 于是可以先预处理出区间的gcd 然后二分查找就好了 预处理gcd我这里用的是倍增法 总的时间复杂度O(NlogN) /* Cf 271F 倍增求区间 ...

  2. Excel等外部程序点击链接会带上IE信息的bug

    今天碰到一个问题,在Excel内点击链接到默认浏览器Chrome打开,奇怪的是服务端收到的Session一直对不上. 查了很久发现这个Excel到Chrome的跳转竟然带上了IE的Cookie 和 U ...

  3. ajax验证用户名和密码

    var user = form.name.value; var password = form.password.value; var url = "chkname.php?user=&qu ...

  4. MongoDB 与传统关系型数据库mysql比较

    与关系型数据库相比,MongoDB的优点: 转载自  http://blog.sina.com.cn/s/blog_966e430001019s8v.html①弱一致性(最终一致),更能保证用户的访问 ...

  5. angular 实现总价满100折扣

    <div ng-controller="CartController"> <div ng-repeat="item in items"> ...

  6. Android 即时语音聊天工具 开发

    使用融云SDK 1. 功能需求分析 1.1 核心功能需求: * 即时通讯 * 文字聊天 * 语音聊天 1.2 辅助功能需求: * 注册.登录 * 好友添加功能 * 好友关系管理 2. 融云即时通讯平台 ...

  7. 利用Python读取Matlab的Mat文件内容

    手头有别人写的Matlab程序,其中用到了Mat文件.现在不想安装Matlab,却又想读取Mat文件内容,该怎么办呢? 感谢scipy!!! import scipy.io data = scipy. ...

  8. TreeList的VisibleNodesCount,Noes.Count,AllNdoesCount以及焦点节点的删除

    初始5个Nodes 隐藏23节点,打印全部节点Tag 显示23,打印全部节点Tag 隐藏全部节点,打印节点Tag TreeList.Nodes.Count == TreeList.AllNodesCo ...

  9. windows7任务栏上的图标修复

    Technorati 标记: 疑难杂症   今天,我在使用Windows 7的时候,因为操作一些系统文件,发现桌面下角的个别正在运行的图标不见了,但是,我们如果再打开一个新程序,又会提醒你已经在运行了 ...

  10. Fiddle的应用

    在Composer中输入测试的网址: 可能会发生一下情况,这意味着需要在左侧面板中选择一项,来看回应:   选择一个请求后,选择TextView,看原生的回应(Response)内容