zoukankan      html  css  js  c++  java
  • 实现activity跳转动画的若干种方式

     

    第一种: (使用overridePendingTransition方法实现Activity跳转动画)

    在Activity中代码如下

    /**
     * 点击按钮实现跳转逻辑
     */
    button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    /**
     * 在调用了startActivity方法之后立即调用overridePendingTransition方法
     */
    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
    startActivity(intent);
    overridePendingTransition(R.anim.slide_in_left, R.anim.slide_in_left);
    }
    });

    在anim文件下代码如下

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shareInterpolator="false"
    Android:zAdjustment="top">
    
    <translate
    Android:duration="200"
    Android:fromXDelta="-100.0%p"
    Android:toXDelta="0.0" />
    </set>

    第二种: (使用style的方式定义Activity的切换动画)

    从清单文件入手

    <!-- 系统Application定义 -->
    <application
    Android:allowBackup="true"
    Android:icon="@mipmap/ic_launcher"
    Android:label="@string/app_name"
    Android:supportsRtl="true"
    Android:theme="@style/AppTheme">

    进入AppTheme

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="Android:windowAnimationStyle">@style/activityAnim</item>
    </style>
    
    
    <!-- 使用style方式定义activity切换动画 -->
    <style name="activityAnim">
    <item name="Android:activityOpenEnterAnimation">@anim/slide_in_top</item>
    <item name="Android:activityOpenExitAnimation">@anim/slide_in_top</item>
    </style>

    在windowAnimationStyle中存在四种动画

    activityOpenEnterAnimation // 用于设置打开新的Activity并进入新的Activity展示的动画
    activityOpenExitAnimation  // 用于设置打开新的Activity并销毁之前的Activity展示的动画
    activityCloseEnterAnimation  // 用于设置关闭当前Activity进入上一个Activity展示的动画
    activityCloseExitAnimation  // 用于设置关闭当前Activity时展示的动画

    Activity中的测试代码如下

    /**
     * 点击按钮,实现Activity的跳转操作
     * 通过定义style的方式实现activity的跳转动画
     */
    button2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    /**
     * 普通的Intent跳转Activity实现
     */
    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
    startActivity(intent);
    }
    });

    第三种: (使用ActivityOptions切换动画实现Activity跳转动画)

    第一步

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    // 设置contentFeature,可使用切换动画
    getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
    Transition explode = TransitionInflater.from(this).inflateTransition(Android.R.transition.explode);
    getWindow().setEnterTransition(explode);
    
    setContentView(R.layout.activity_main);
    }

    第二步

    /**
     * 点击按钮,实现Activity的跳转操作
     * 通过Android5.0及以上代码的方式实现activity的跳转动画
     */
    button3.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    Intent intent = new Intent(MainActivity.this, ThreeActivity.class);
    startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this).toBundle());
    }
    });

    第四种: (使用ActivityOptions之后内置的动画效果通过style的方式)

    先在Application项目res目录下新建一个transition目录,然后创建资源文件activity_explode,编写如下代码

    <explode xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:duration="300" />

    定义style文件

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    
        <item name="Android:windowEnterTransition">@transition/activity_explode</item>
        <item name="Android:windowExitTransition">@transition/activity_explode</item>
    </style>

    执行跳转逻辑

    /**
     * 点击按钮,实现Activity的跳转操作
     * 通过Android5.0及以上style的方式实现activity的跳转动画
     */
    button4.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    /**
     * 调用ActivityOptions.makeSceneTransitionAnimation实现过度动画
     */
    Intent intent = new Intent(MainActivity.this, FourActivity.class);
    startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this).toBundle());
    }
    });

    第五种: (使用ActivityOptions动画共享组件的方式实现跳转Activity动画)

    在Acitivity_A中布局文件中定义共享组件

    <Button
    Android:id="@+id/button5"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_below="@+id/button4"
    Android:layout_marginTop="10dp"
    Android:layout_marginRight="10dp"
    Android:layout_marginLeft="10dp"
    Android:text="组件过度动画"
    Android:background="@color/colorPrimary"
    Android:transitionName="shareNames"
    />

    在Acitivity_B中布局文件中关联共享组件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/activity_second"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:gravity="center_horizontal"
    Android:orientation="vertical"
    Android:transitionName="shareNames"
    >
    
    <TextView
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="@color/colorAccent"
    Android:layout_marginTop="10dp"
    Android:layout_marginBottom="10dp"
    />

    执行跳转逻辑

    /**
     * 点击按钮,实现Activity的跳转操作
     * 通过Android5.0及以上共享组件的方式实现activity的跳转动画
     */
    button5.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    Intent intent = new Intent(MainActivity.this, FiveActivity.class);
    startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this, button5, "shareNames").toBundle());
    }
    });

    总结:

    • overridePendingTransition方法从Android2.0开始,基本上能够覆盖我们activity跳转动画的需求;

    • ActivityOptions API是在Android5.0开始的,可以实现一些炫酷的动画效果,更加符合MD风格;

    • ActivityOptions还可以实现两个Activity组件之间的过度动画; *

    关于我

    微信公众号:infree6 或者直接扫码

  • 相关阅读:
    CSS盒子模型
    getContextPath、getServletPath、getRequestURI、request.getRealPath的区别
    MYSQL中的CASE WHEN END AS
    单点登录的精华总结
    git&github
    June 21st 2017 Week 25th Wednesday
    June 20th 2017 Week 25th Tuesday
    June 19th 2017 Week 25th Monday
    June 18th 2017 Week 25th Sunday
    June 17th 2017 Week 24th Saturday
  • 原文地址:https://www.cnblogs.com/songjianzaina/p/10362570.html
Copyright © 2011-2022 走看看