来看下效果图:

大致效果解释:

1. 当用户点击登录时logo下滑一定距离

2. 下滑后旋转90时 变化图标

3. 继续旋转90度

4. 然后移动到左上角 透明度渐变到上个activity 最后销毁当前activity

术语

登录界面我们 称为 A (本质是activity) 如下图

返回界面我们 称为 B (本质是activity) 如下图

大致思路

让A界面的A的logo移动到左上角时候 我们让A界面透明到B

然后在finish() A 即可

注意: 结束A的时候(调用A的finish时候,会有一个闪屏 或者左移动的切换动画 切换到B 此时很突兀)

解决:在finish()后面自己写一个过渡动画(随便写就行 甚至可以不写任何效果,只是为了覆盖原来的默认过渡效果)

//结束A
finish();
//设置动画,第一个是进入动画第二个是出动画
overridePendingTransition(R.anim.scale_in, R.anim.scale_out);

具体代码步骤

  1. 定义一个样式 在values/style下创建一个主题样式:


    <style name="activityTheme" parent="@android:style/Theme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    </style>

    代码解释

    <item name="windowBackground"> 窗体的背景 </item>
    <item name="android:windowContentOverlay">@null</item> 自定义Titlebar时去掉多余的阴影。
    <item name="android:windowIsTranslucent">false</item> 窗体是否半透明
  2. 让其A 继承此主题(在清单文件内继承)

      <activity
    android:name="A"
    android:theme="@style/activityTheme"
    />
  3. 让其A的根布局开启透明动画

    假设A的布局如下

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/ll_root"
    android:background="@color/all_bg"
    android:orientation="vertical" />
      AlphaAnimation alphaAnimation = new
    AlphaAnimation(1.0f,0.0f);
    alphaAnimation.setDuration(2*1000);
    alphaAnimation.setFillAfter(true);
    //透明度 变化 alphaAnimation.setAnimationListener(new
    alphaAnimation.setAnimationListener(new AnimationListener() { @Override
    public void onAnimationStart(Animation animation) {
    // TODO Auto-generated method stub } @Override
    public void onAnimationRepeat(Animation animation) {
    // TODO Auto-generated method stub } @Override
    public void onAnimationEnd(Animation animation) { finish();
    overridePendingTransition(R.anim.scale_in, R.anim.scale_out);
    }
    });
    ll_root.startAnimation(alphaAnimation);

这里随便给大家看一个进入的动画源码吧

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromYScale="0.0"
android:toYScale="1.0"
android:pivotY="50%"
android:fillAfter="false"
android:duration="200" />
</set>

补充

以下属性以Dialog为例来讲解:

<item name="windowBackground"> 窗体的背景 </item>
<item name="windowFrame">Dialog 是否有边框 </item>
<item name="windowNoTitle">窗体是否有标题</item>
<item name="windowFullscreen">false</item> 是否为全屏
<item name="windowOverscan">false</item> 是否要求窗体铺满整屏幕
<item name="windowIsFloating">false</item> 窗体是否浮在下层之上
<item name="windowContentOverlay">@null</item> 设置窗体内容背景
<item name="windowShowWallpaper">false</item> 是否显示壁纸
<item name="windowTitleStyle">@android :style/WindowTitle</item> 窗体的标题栏Style
<item name="windowTitleSize">25dip</item> 窗体文字大小 窗体标题栏背景
<item name="windowTitleBackgroundStyle">@android :style/WindowTitleBackground</item> 窗体切换时的动画样式
<item name="android:windowAnimationStyle">@android :style/Animation.Activity</item> 在使用输入法时窗体的适配
<item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecified</item>
<item name="windowActionBar">false</item> 是否打开ActionBar
<item name="windowActionModeOverlay">false</item> 这个暂时不知道,希望大神能回答一下。
<item name="windowCloseOnTouchOutside">false</item> 是否再点击外部可关闭 <item name="android:windowIsTranslucent">false</item> 窗体是否半透明
<item name="android:backgroundDimEnabled">false</item>: 背景是否模糊显示 6. <item name="android:windowContentOverlay">@null</item> 自定义Titlebar时去掉多余的阴影。

补充知识的原作者

两个activity之间透明过渡效果和经验的更多相关文章

  1. 如何实现两个Activity 之间如何通讯

    <转> 今天主要学习了Activity 组件,在这里作一下总结 1,学习如何创建Activity 创建 Activity 要点: (1) 一个Activity就是一个类,并且这个类要继承A ...

  2. Android中两个Activity之间简单通信

    在Android中,一个界面被称为一个activity,在两个界面之间通信,采用的是使用一个中间传话者(即Intent类)的模式,而不是直接通信. 下面演示如何实现两个activity之间的通信. 信 ...

  3. 两个Activity之间共享数据、互相访问的另一种方式的实现

    本帖最后由 勇敢的心_ 于 2010-9-29 11:51 编辑 本人从windows编程转过来学习Android开发,一直在想如果两个Activity之间能够像C#或delphi中的Form一样,可 ...

  4. 【转】 android之如何在两个activity之间传递handler_利用broadcast广播机制

    原文:http://blog.csdn.net/jason0539/article/details/18075293 这算是如何在两个activity之间传递handler的解决方案二了,解决方案一见 ...

  5. 两个 Activity 之间跳转时必然会执行的是哪几个方法?

    一般情况下比如说有两个 activity,分别叫 A,B,当在 A 里面激活 B 组件的时候, A 会调用 onPause()方法,然后 B 调用 onCreate() ,onStart(), onR ...

  6. 两个activity之间传递数据用startActivityForResult方法。

    package com.example.testactivityresquest; import android.app.Activity; import android.content.Intent ...

  7. 如何在两个activity之间传递bitmap

    1.需求 在项目开发过程中,打印小票前需要添加打印预览功能,交易数据在打印前转成bitmap然后直接打印,为了显示这个bitmap需要将其传给显示activity. 2.解决方法 把bitmap存储为 ...

  8. 两个Activity之间的交互startActivityForResult的使用

    代码如下: package com.zzw.teststartintentforrequest; import android.app.Activity; import android.content ...

  9. 两个activity之间的数据传递

    1.清单文件第二个activity<activity android:name="com.example.twodatapass.ResultActivity" androi ...

随机推荐

  1. PhantomJS命令行选项

    支持命令行选项有: --help或-h列出所有可能的命令行选项.立即停止,不会运行一个脚本作为参数传递. --version或-v打印的版本PhantomJS.立即停止,不会运行一个脚本作为参数传递. ...

  2. 1018关于MySQL复制搭建[异步复制和半同步复制]

    转自:http://www.cnblogs.com/ivictor/p/5735580.html 搭建MySQL数据库的主从架构,还是蛮简单的.重要的几个命令整理一下. 主从服务器上: SHOW VA ...

  3. 学习React系列(二)——深入了解JSX

    1.JX实际上是React.createElement(component,props,...children)的语法糖 2.JSX判断是否为react组件的依据是标签首字母为大写(所以要求用户自定义 ...

  4. 【DataMagic】如何在万亿级别规模的数据量上使用Spark

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文首发在云+社区,未经许可,不得转载. 作者:张国鹏 | 腾讯 运营开发工程师 一.前言 Spark作为大数据计算引擎,凭借其快速.稳定. ...

  5. JavaScript树(一) 简介

    树的相关术语 一个树结构包含一系列存在父子关系的节点. 每个节点都有一个父节点 (除了顶部的第一个节点)以及零个或多个子节点: 位于树顶部的节点叫作根节点(11) .它没有父节点.树中的每个元素都叫作 ...

  6. BZOJ4711 小奇挖矿

    Description [题目背景] 小奇在喵星系使用了无限非概率驱动的采矿机,以至于在所有星球上都采出了一些矿石,现在它准备建一些矿石仓 库并把矿石运到各个仓库里. [问题描述] 喵星系有n个星球, ...

  7. 【BZOJ3110】【ZJOI2013】k大数查询

    原题传送门 题意简析 给定一个区间,可以在这个区间上每个整数点插入若干个数(这些数数值可以重复)你需要支持2种操作: 1)在[a,b]间所有整数点插入c 2)查询[a,b]内第c大的数 解题思路 树套 ...

  8. final、finally与finalize的区别

    1. final  在java中,final可以用来修饰类,方法和变量(成员变量或局部变量).下面将对其详细介绍. 1.1 修饰类 当用final修饰类的时,表明该类不能被其他类所继承.当我们需要让一 ...

  9. Elasticsearch 学习(一):入门

    一.概念 Elasticsearch 是一个实时分布式搜索和分析引擎.它用于全文搜索.结构化搜索.分析以及将这三者混合使用. 维基百科.英国卫报.StackOverflow.Github 等公司都在使 ...

  10. 配置文件错误导致jenkins无法启动 org.xmlpull.v1.XmlPullParserException: only 1.0 is supported as <?xml version not '1.1' (position: START_DOCUMENT seen <?xml version=\'1.1\'... @1:19)

    org.xmlpull.v1.XmlPullParserException: only 1.0 is supported as <?xml version not '1.1' (position ...