关闭

Android过渡动画之进入退出

标签: android进入退出Transition
3197人阅读 评论(2) 收藏 举报
分类:

在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的话,过渡过程中会有一个退出的现象,希望有大神看到能帮我解决这个问题,谢谢~

1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Android Glide图片加载(加载监听、加载动画)

glide用法以及各种注意事项
  • zhihui_520
  • zhihui_520
  • 2016-07-04 17:19
  • 25794

Glide动画加载

先对比一下当前缓存的优缺点 Universal Image Loader:一个强大的图片加载库,包含各种各样的配置,最老牌,使用也最广泛。 Picasso: Square出品,必属精品。和Ok...
  • ws595372215
  • ws595372215
  • 2016-04-06 09:49
  • 8967

Android过渡动画之进入退出

**进入和退出的效果包括**: explode(分解) –进或出地移动视图,从屏幕中间 slide(滑动) -进或出地移动视图,从屏幕边缘 fade(淡出) –通过改变屏幕上视图的不透明度达到添加或者...
  • Picasso_L
  • Picasso_L
  • 2015-11-18 17:08
  • 3197

基于material design的过渡加载动画

几乎大部分应用都有Spalsh闪屏页面,目的就是进行一些初始化程序,检查版本更新等 那么怎么打造一个炫酷的过渡加载动画呢?google提供了material design的设计风格 分析整个过...
  • B1ueKid
  • B1ueKid
  • 2016-05-21 14:35
  • 1586

Android Fragment替换动画及后退处理

package com.example.fragmentanimation; import android.os.Bundle; import android.support.v4.app.Frag...
  • FX_SKY
  • FX_SKY
  • 2013-11-15 18:28
  • 9649

android 5.x 过渡动画demo

  • 2016-05-06 15:52
  • 11.02MB
  • 下载

Android 优化加载中的Toast,实现真正的夹在过渡动画 源码

  • 2015-10-10 15:16
  • 1.08MB
  • 下载

Android水波纹过渡动画

  • 2015-12-31 00:31
  • 2.16MB
  • 下载

Freeflow自定义布局和出色的动画过渡效果【Android】

  • 2017-08-25 20:12
  • 1.48MB
  • 下载

Android 5.X 新特性详解(三)——Activity过渡动画

  • 2016-06-12 14:27
  • 664KB
  • 下载
    个人资料
    • 访问:293774次
    • 积分:3315
    • 等级:
    • 排名:第11796名
    • 原创:84篇
    • 转载:16篇
    • 译文:0篇
    • 评论:119条
    最新评论