您的位置:首页 > 移动开发 > Android开发

Android过渡动画之进入退出

2015-11-18 17:08 441 查看
在Android5.x中,Google对动画效果进行了更深一步的诠释,为Activity的转场效果设计了更加丰富的动画效果。

Android5.x提供了三种Transition类型

1、进入:一个进入的过渡(动画)决定activity中的所有的视图怎么进入屏幕。

2、退出:一个退出的过渡(动画)决定一个activity中的所有视图怎么退出屏幕。

3、共享元素:一个共享元素过渡(动画)决定两个activities之间的过渡,怎么共享(它们)的视图。

进入和退出的效果包括

explode(分解) –进或出地移动视图,从屏幕中间

slide(滑动) -进或出地移动视图,从屏幕边缘

fade(淡出) –通过改变屏幕上视图的不透明度达到添加或者移除视图(的效果)

使用步骤:

1.设置动画(两种方式)

a、xml设置

当你定义继承了material主题样式时,使用android:windowContentTransitions属性启用窗口的内容转换(效果)。你还可以指定进入、退出、和共享元素的转换:

<style name="myTheme" parent="android:Theme.Material">
<!-- 允许使用transitions -->
<item name="android:windowContentTransitions">true</item>

<!-- 指定进入和退出transitions -->
<item name="android:windowEnterTransition">@transition/explode</item>
<item name="android:windowExitTransition">@transition/explode</item>

<!-- 指定shared element transitions -->
<item name="android:windowSharedElementEnterTransition">
@transition/change_image_transform</item>
<item name="android:windowSharedElementExitTransition">
@transition/change_image_transform</item>
</style>


定义transition动画:

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<explode/>
<changeBounds/>
<changeTransform/>
<changeClipBounds/>
<changeImageTransform/>
</transitionSet>


b、代码设置

// 允许使用transitions
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);

// 设置一个exit transition
getWindow().setExitTransition(new Explode());//new Slide()  new Fade()


在这里需要注意:

(1)setExitTransition() - 当A start B时,使A中的View退出场景的transition

(2)setEnterTransition() - 当A start B时,使B中的View进入场景的transition

(3)setReturnTransition() - 当B 返回 A时,使B中的View退出场景的transition

(4)setReenterTransition() - 当B 返回 A时,使A中的View进入场景的transition

另外如果需要修改动画时长,可以这样:

Fade fade = new Fade();
fade.setDuration(2000);
getWindow().setExitTransition(fade);


2.Activity跳转方法

startActivity(intent,ActivityOptions.makeSceneTransitionAnimation(this).toBundle());


下面看一个实例demo:



具体代码:

第一个界面MainActivity.java

public class MainActivity extends Activity {

private Intent intent;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_transition);
}

// 设置不同动画效果
public void explode(View view) {
intent = new Intent(this, Transitions.class);
intent.putExtra("flag", 0);
startActivity(intent,
ActivityOptions.makeSceneTransitionAnimation(this)
.toBundle());
}
// 设置不同动画效果
public void slide(View view) {
intent = new Intent(this, Transitions.class);
intent.putExtra("flag", 1);
startActivity(intent,
ActivityOptions.makeSceneTransitionAnimation(this)
.toBundle());
}
// 设置不同动画效果
public void fade(View view) {
intent = new Intent(this, Transitions.class);
intent.putExtra("flag", 2);
startActivity(intent,
ActivityOptions.makeSceneTransitionAnimation(this)
.toBundle());
}


activity_transition.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">

<Button
android:layout_width="match_parent"
android:layout_height="100dp"
android:onClick="explode"
android:text="explode" />

<Button
android:layout_width="match_parent"
android:layout_height="100dp"
android:onClick="slide"
android:text="slide" />

<Button
android:layout_width="match_parent"
android:layout_height="100dp"
android:onClick="fade"
android:text="fade" />
</LinearLayout>


第二个界面Transitions.java

public class Transitions extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
int flag = getIntent().getExtras().getInt("flag");
// 设置不同的动画效果
switch (flag) {
case 0:
Explode explode = new Explode();
explode.setDuration(1000);
getWindow().setEnterTransition(explode);
break;
case 1:
Slide slide = new Slide();
slide.setDuration(1000);
getWindow().setEnterTransition(slide);
break;
case 2:
Fade fade = new Fade();
fade.setDuration(1000);
getWindow().setEnterTransition(fade);
getWindow().setExitTransition(fade);
break;
}
setContentView(R.layout.activity_transition_to);
}


但是,这个知识点我还有一个疑问,比如我需要从欢迎页过渡到首页,欢迎页动画过渡玩需要关闭,但是如果我直接加finish的话,过渡过程中会有一个退出的现象,希望有大神看到能帮我解决这个问题,谢谢~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: