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 或者直接扫码

  • 相关阅读:
    关于泛型
    共享几个.net工具类
    关于Guid
    自动更新解决方案
    订阅者模式实例
    好久没有blog了,今日就share一个update program的经验
    杀掉相应数据库的进程
    解决IFrame下无法写Cookie问题
    sql处理死锁
    log4net配置及使用方法
  • 原文地址:https://www.cnblogs.com/songjianzaina/p/10362570.html
Copyright © 2011-2022 走看看