1.跟overridePendingTransition(enterAnim, exitAnim)这个方法有关,可以设置出入的动画。
1
2
3
4
5
6
7
8
9
10
|
findViewById(R.id.button2).setOnClickListener(
new
OnClickListener()
{
@Override
public
void
onClick(View v)
{
Intent intent =
new
Intent(OneActivity.
this
, TwoActivity.
class
);
startActivity(intent );
overridePendingTransition(
0
,
0
);
//去掉Activity切换间的动画
}
});
|
代码设置动画:
启动后
1
2
|
startActivity(
new
Intent(A.
this
, B.
class
));
overridePendingTransition(inAnim, outAnim);
|
结束时
1
2
|
finish();
activity.overridePendingTransition(inAnim, outAnim);
|
2.通过style设置全局的activity动画
主题style:
1
2
3
|
<style name=
"Theme.Test"
parent=
"@android:style/Theme.Light.NoTitleBar"
>
<item name=
"android:windowAnimationStyle"
>
@style
/Animation.Activity.Test</item>
</style>
|
动画style:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<style name=
"Animation.Activity.Test"
parent=
"@android:style/Animation.Activity"
>
<item name=
"android:activityOpenEnterAnimation"
>
@anim
/activity_open_enter</item>
<item name=
"android:activityOpenExitAnimation"
>
@anim
/activity_open_exit</item>
<item name=
"android:activityCloseEnterAnimation"
>
@anim
/activity_close_enter</item>
<item name=
"android:activityCloseExitAnimation"
>
@anim
/activity_close_exit</item>
<item name=
"android:taskOpenEnterAnimation"
>
@anim
/activity_open_enter</item>
<item name=
"android:taskOpenExitAnimation"
>
@anim
/activity_open_exit</item>
<item name=
"android:taskCloseEnterAnimation"
>
@anim
/activity_close_enter</item>
<item name=
"android:taskCloseExitAnimation"
>
@anim
/activity_close_exit</item>
<item name=
"android:taskToFrontEnterAnimation"
>
@anim
/activity_open_enter</item>
<item name=
"android:taskToFrontExitAnimation"
>
@anim
/activity_open_exit</item>
<item name=
"android:taskToBackEnterAnimation"
>
@anim
/activity_close_enter</item>
<item name=
"android:taskToBackExitAnimation"
>
@anim
/activity_close_exit</item>
</style>
|
2.fragment动画
Fragment过度动画分析
Sliding Fragment
介绍:该案例为传统的Fragment增加了个性化的补间动画,其效果是原有fragment向屏幕内做一定的下沉,新的fragment显示在最上层,产生层叠效果的多个fragments。
Video: http://www.youtube.com/watch?v=xbl5cxfA1n4
Source:http://developer.android.com/shareables/devbytes/SlidingFragments.zip
本文将简单分析其实现流程及原理
Step1:添加Fragment并设置点击的切换事件
首先添加一个fragment,并设置显示内容已做区别,案例中显示了一张图片,接着设置单击事件,为了使得我们单击任意位置都能触发fragment的切换动画,这
里需要为用于展示图片的fragment,显示文本的fragment以及黑色背景view都添加该事件监听器。
Step2:fragment切换实现
这里只有2个fragment,一个是用于显示图片,另一个显示文本,预期效果是单击屏幕后,图片下沉,文本显示到顶层,再次单击后则恢复原状,即,文本消失>,图片上浮。
分析这些动画的顺序和效果,图片的下沉可以通过一个组合animation来做,1.缩放,例如缩小为原图80%,2.旋转,这里的下层效果是首先图片x轴旋转40度,>然后再将旋转角度设置为0,3.添加一个半透明的遮罩,以示图片当前出于幕后状态,
文本的出现则在图片的动作完成后,通过manager动态讲其添加到画面上,这里的文本不是全屏的,否则就看不到后面的图片背景,文本的出现也可以添加动画>,这里文本出现时由下至上,消失时由上至下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
private
void
switchFragments () {
if
(mIsAnimating) {
return
;
}
mIsAnimating =
true
;
if
(mDidSlideOut) {
mDidSlideOut =
false
;
getFragmentManager().popBackStack();
}
else
{
mDidSlideOut =
true
;
AnimatorListener listener =
new
AnimatorListenerAdapter() {
@Override
public
void
onAnimationEnd(Animator arg0) {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.animator.slide_fragment_in,
0
,
0
,
R.animator.slide_fragment_out);
transaction.add(R.id.move_to_back_container, mTextFragment);
transaction.addToBackStack(
null
);
transaction.commit();
}
};
slideBack (listener);
}
}
|