Activity.overridePendingTransition三种动画形式调试记录

定义 Activity A,Activity B。

Activity.overridePendingTransition 是在 A 启动 B 时定义这个过程中用什么动画的。

常见三种动画形式: 1) A slide up B still,  2) A disapper B slide up,  3) A  and B both slide up。

1) A slide up B still

核心代码:

slide_up_z.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:zAdjustment="top">
    <translate
        android:duration="1000"
        android:fillAfter="true"
        android:fromYDelta="0"
        android:toYDelta="-100%" >
    </translate>
</set>

SecondActivity.java

public static void launchWithFirstSlideUpAnim(Activity activity) {
	Intent i = new Intent(activity,SecondActivity.class);
	activity.startActivity(i);		
         activity.overridePendingTransition(0, R.anim.slide_out_z);
}
关键点:slide_up_z.xml中定义 android:zAdjustment="top" ,将 A 的视图定义在最上层方有效果。

2)  A disapper B slide up

核心代码:

slide_in_z.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="1000"
        android:fillAfter="true"
        android:fromYDelta="30%p"
        android:toYDelta="0" >
    </translate>
</set>

SecondActivity.java

public static void launchWithSecondSlideUpAnim(Activity activity) {
	Intent i = new Intent(activity,SecondActivity.class);
	activity.startActivity(i);
	activity.overridePendingTransition(R.anim.slide_in_z,0);
}
关键点:开发时注意到比较多的热门app会在Welcome转主页的时候用到这个动画,可能一般Welcome页面会设计成全屏,
而主页一般不是全屏,采用这种让welcome消失而主页执行动画的方式能比较好的承接这种转换。另外这个动画时间最好设置成
300ms,因为有些比较高版本手机在启动B的时候状态栏往下走的动画也是300ms,类似一个咬合动画。

3) A and B both slide up

核心代码:

slide_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="1000"
        android:fillAfter="true"
        android:fromYDelta="100%"
        android:toYDelta="0" >
    </translate>
</set>

slide_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="1000"
        android:fillAfter="true"
        android:fromYDelta="0"
        android:toYDelta="-100%" >
    </translate>
</set>

SecondActivity.java

	public static void launchWithBothSlideUp(Activity activity) {
		Intent i = new Intent(activity,SecondActivity.class);
		activity.startActivity(i);
		activity.overridePendingTransition(R.anim.slide_in,R.anim.slide_out);
	}
关键点:让两个动画的时间相同。
 
遇到的问题:
1)动画不执行:先查看手机设置,显示->动画 打上勾。
2)A 启动 B后不执行动画:在A中为了模拟延迟操作,如下
private void delay() {
	new Timer().schedule(new TimerTask() {
		public void run() {
		SecondActivity.launchWithFirstSlideUpAnim(this);
		}
	}, 1000);
}
后来发现在非UI线程启动Activity是不会执行动画的,于是改为
private void delay() {
	new Timer().schedule(new TimerTask() {
		public void run() {
			Message msg = Message.obtain();
			msg.what = TIME_OUT;
			mHandler.sendMessage(msg);
		}
	}, 1000);
}
在Handler中处理,结果好了。
private static class MyHandler extends Handler {
	WeakReference<FirstActivity> weakRef = null;

	MyHandler(WeakReference<FirstActivity> ref) {
		this.weakRef = ref;
	}

	@Override
	public void handleMessage(Message msg) {
		switch (msg.what) {
		case TIME_OUT:
			if (weakRef != null) {
				FirstActivity activity = weakRef.get();
				if (activity != null) {								                            activity.enterSecondActivity();
				}
			}
			break;
		default:break;
		}
	}
}//end of handler

源码(eclipse):http://files.cnblogs.com/files/big-w/StartActivityWithAnimation.zip
时间: 2024-12-22 17:58:47

Activity.overridePendingTransition三种动画形式调试记录的相关文章

Splash闪屏页-三种动画效果

三种动画效果 旋转 RotateAnimation 缩放 ScaleAnimation 渐变 AlphaAnimation 动画效果集合 AnimationSet 1 // 初始化欢迎页面的动画 2 3 private void initViews(){ 4 5 RelativeLayout rlRoot = (RelativeLayout) findViewById(R.id.rl_root); 6 7 RotateAnimation rotate = new RotateAnimation(

三种方案实现日志记录功能

三种方案实现日志记录功能 方案一.使用拦截器实现日志记录功能 步骤一.首先需要我们自定义一个注解类 package cn.hmy.Util; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 自定义操作日志注解接口类

Android动画 三种动画

Android可以使用三种动画 Frame Animation-帧动画 ,就像GIF图片,通过一系列Drawable依次显示来模拟动画的效果 Tween Animation-补间动画,给出两个关键帧,通过一些算法将给定属性值在给定的时间内在两个关键帧间渐变,只能应用于View对象:只是改变了View对象绘制的位置,而没有改变View对象本身 Property Animation-属性动画,更改的是对象的实际属性:不止可以应用于View,还可以应用于任何对象 参考:http://www.cnblo

jquery论三种动画停止的区别

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script type="text/javascript" src="../js/jquery-1.9.0.min.js" ></script> <script> $(document).ready(function(){ $(".start&qu

详解 MySql InnoDB 中的三种行锁(记录锁、间隙锁与临键锁)

详解 MySql InnoDB 中的三种行锁(记录锁.间隙锁与临键锁) 前言 InnoDB 通过 MVCC 和 NEXT-KEY Locks,解决了在可重复读的事务隔离级别下出现幻读的问题.MVCC 我先挖个坑,日后再细讲,这篇文章我们主要来谈谈那些可爱的锁. 什么是幻读? 幻读是在可重复读的事务隔离级别下会出现的一种问题,简单来说,可重复读保证了当前事务不会读取到其他事务已提交的 UPDATE 操作.但同时,也会导致当前事务无法感知到来自其他事务中的 INSERT 或 DELETE 操作,这就

IOS三种动画方式

IOS开发UI篇—iOS开发中三种简单的动画设置 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所有动画提交并生成动画 [UIVie

链表的三种创建形式

刚刚学习完链表,总结了三种链表的创建方式,从表前插入节点,从表后插入节点和它的进化版?? #include <stdio.h> #include <stdlib.h> typedef struct node { char data; struct node *next; }linkList; //下面??的是从前面插入,但是缺点比较明显,因为链表的顺序和你输入的顺序是相反的...推荐使用后面的 linkList *CreatList_1() { char ch; linkList

Android三种动画原理

Android起初有两种动画:Frame Animation(逐帧动画) Tween Animation(补间动画) 两种动画的工作原理: Frame Animation:大体意思就是将UI设计的多张图片组成的动画,然后在将他们组合起来连贯进行播放,类似于早期电影的工作原理. Tween Animation:是对某个View进行一系列的动画的操作,包括淡入淡出(Alpha),缩放(Scale),平移(Translate),旋转(Rotate)四种模式 然而在从Android3.0版本开始后,An

Android 基础的三种动画 帧动画、补间动画、属性动画。

帧动画 drawable   animation 通过xml文件声明一个帧动画 ①在res目录下创建一个drawable目录 把用到的图片资源放到这个目录下 并且创建一个xml文件 根元素  animation-list可以设置一个属性 oneshot如果设置为true 动画只执行一次 执行之后停在最后一帧 animation-list 子元素item <?xml version="1.0" encoding="utf-8"?> 2. <anima