两个activity之间透明过渡效果和经验
来看下效果图:
大致效果解释:
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);
具体代码步骤
定义一个样式 在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> 窗体是否半透明让其A 继承此主题(在清单文件内继承)
<activity
android:name="A"
android:theme="@style/activityTheme"
/>让其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之间透明过渡效果和经验的更多相关文章
- 如何实现两个Activity 之间如何通讯
<转> 今天主要学习了Activity 组件,在这里作一下总结 1,学习如何创建Activity 创建 Activity 要点: (1) 一个Activity就是一个类,并且这个类要继承A ...
- Android中两个Activity之间简单通信
在Android中,一个界面被称为一个activity,在两个界面之间通信,采用的是使用一个中间传话者(即Intent类)的模式,而不是直接通信. 下面演示如何实现两个activity之间的通信. 信 ...
- 两个Activity之间共享数据、互相访问的另一种方式的实现
本帖最后由 勇敢的心_ 于 2010-9-29 11:51 编辑 本人从windows编程转过来学习Android开发,一直在想如果两个Activity之间能够像C#或delphi中的Form一样,可 ...
- 【转】 android之如何在两个activity之间传递handler_利用broadcast广播机制
原文:http://blog.csdn.net/jason0539/article/details/18075293 这算是如何在两个activity之间传递handler的解决方案二了,解决方案一见 ...
- 两个 Activity 之间跳转时必然会执行的是哪几个方法?
一般情况下比如说有两个 activity,分别叫 A,B,当在 A 里面激活 B 组件的时候, A 会调用 onPause()方法,然后 B 调用 onCreate() ,onStart(), onR ...
- 两个activity之间传递数据用startActivityForResult方法。
package com.example.testactivityresquest; import android.app.Activity; import android.content.Intent ...
- 如何在两个activity之间传递bitmap
1.需求 在项目开发过程中,打印小票前需要添加打印预览功能,交易数据在打印前转成bitmap然后直接打印,为了显示这个bitmap需要将其传给显示activity. 2.解决方法 把bitmap存储为 ...
- 两个Activity之间的交互startActivityForResult的使用
代码如下: package com.zzw.teststartintentforrequest; import android.app.Activity; import android.content ...
- 两个activity之间的数据传递
1.清单文件第二个activity<activity android:name="com.example.twodatapass.ResultActivity" androi ...
随机推荐
- 1.0 添加WEB API项目并按注释生成文档(多项目结构)
1.新建ASP.NET 项目,模板选择如图 2.选择Web API,并选择不进行身份验证方式 成功后我们看到这个结果. 至于其它三种身份验证方式,不太适合我的使用.而且这种方式也可以在代码里去实现身份 ...
- [LeetCode] K Empty Slots K个空槽
There is a garden with N slots. In each slot, there is a flower. The N flowers will bloom one by one ...
- php中一些提高性能的技巧
php中一些提高性能的技巧 tags:php性能 提高性能 php中的@ php的静态 引言:php作为一种脚本语言,本身的性能上肯定是不如c++或者java的.拥有简单易学的特性的同时,性能提升的空 ...
- Lazy Loading | Explicit Loading | Eager Loading in EntityFramework and EntityFramework.Core
EntityFramework Eagerly Loading Eager loading is the process whereby a query for one type of entity ...
- [Codeforces 940E]Cashback
Description 题库链接 给你两个整数 \(n,c\) ,以及一个数列 \(A\) ,让你将序列分为许多段.对于每一段,他的价值为序列内除了最小的 \(\left\lfloor\frac{le ...
- NOIP 2015运输计划
题目背景 公元 2044 年,人类进入了宇宙纪元. 题目描述 L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道连通了 L 国的所有星球. 小 P 掌管一家 ...
- 以独立的语句将new对象置入智能指针
以独立的语句将newed对象置入智能指针: processWidget(std::tr1::share_ptr<Widget>(new Widget) , priority()); 我们在 ...
- [UOJ UR#16]破坏发射台
来自FallDream的博客,未经允许,请勿转载,谢谢. 传送门 先考虑n是奇数的情况,很容易想到一个dp,f[i][0/1]表示转移到第i个数,第i个数是不是第一个数的方案数,然后用矩阵乘法优化一下 ...
- 关于java线程中stop interrupt daemon wait notify
一.关于终止线程stop与interrupt 一般来说,线程执行结束后就变成消亡状态,乍看之下我们并不需要人为进行干预(人为停止线程),不过凡事都有例外吧,在服务器或者其他应用场景下,线程为了提供服务 ...
- python raise和assert的区别
python中raise和assert的区别 一.使用raise抛出异常 python可以自动触发异常,raise(内置函数)的定义为显示的抛出异常,用户可以使用raise进行判断,显式的引发异常,r ...