您当前的位置: 首页 >  动画

Kevin-Dev

暂无认证

  • 0浏览

    0关注

    544博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Android -- 动画】Activity 转场动画

Kevin-Dev 发布时间:2020-08-20 21:16:00 ,浏览量:0

一、前言

在 Android 5.0 以后,Google 为 Activity 的转场设计了更加友好的动画效果。

转场动画(Activity Transition)基本介绍 Android 5.0 提供了三种 Transition 类型

  • 进入:决定Activity中的所有的视图怎么进入屏幕。
  • 退出:决定一个Activity中的所有视图怎么退出屏幕。
  • 共享元素:决定两个activities之间的过渡,怎么共享(它们)的视图。

进入和退出包含如下动画效果

  • explode(分解) – 从屏幕中间进或出
  • slide(滑动) - 从屏幕边缘进或出地
  • fade(淡出) –通过改变屏幕上视图的不透明度达到添加或者移除视图的效果

共享元素包含如下动画效果

  • changeBounds - 改变目标视图的布局边界
  • changeClipBounds - 裁剪目标视图边界
  • changeTransform - 改变目标视图的缩放比例和旋转角度
  • changeImageTransform - 改变目标图片的大小和缩放比例
二、传统转场动画

1. 效果图 在这里插入图片描述

2. 实现代码



    



    

startActivity(new Intent(this, Activity2.class));
overridePendingTransition(R.anim.slide_right_in, R.anim.slide_left_out);
三、新转场动画

5.0 新的转场动画分为 4 种,Explode、Slide、Fade、Share。 1. 效果图 在这里插入图片描述

Explode Explode 的效果是下一个页面的元素从四面八方进入,最终形成完整的页面。代码如下:

// 跳转
Intent intent = new Intent(this, CActivity.class);
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

// 跳转的Activity
public class CActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setEnterTransition(new Explode());
        setContentView(R.layout.activity_c);
    }
}

在跳转时就要注意一点,intent 后面还要再传一个参数 bundle,固定写法ActivityOptions.makeSceneTransitionAnimation(this).toBundle(),下一个 Activity 根据这个就能识别出使用 5.0 新转场动画。

Slide Slide 就是下一个页面元素从底部依次向上运动,最终形成完整的页面。代码如下:

// 跳转
Intent intent = new Intent(this, CActivity.class);
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

// 跳转的Activity
public class CActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setEnterTransition(new Slide());
        setContentView(R.layout.activity_c);
    }
}

Fade Fade 就是下一个页面元素渐变出现,最终形成完整的页面。代码如下:

// 跳转
Intent intent = new Intent(this, CActivity.class);
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

// 跳转的Activity
public class CActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setEnterTransition(new Fade());
        getWindow().setExitTransition(new Fade());
        setContentView(R.layout.activity_c);
    }
}

同样,就是跳转的 Activity 在 onCreate 方法中设置 transition 为 Fade 即可,只不过这里要最好要同时设置 Enter 和 Exit 。

Share Share 是最复杂的一种转场方式,在跳转的两个 Activity 之间,如果有相同的 View 元素,那么,两个元素就可以设置成共享状态,在跳转时,这个 View 就会从第一个 Activity 的显示状态过渡到第二个 Activity 的显示状态,给用户的感觉仿佛是两个 Activity 共享一个 View 。

  • 效果图 在这里插入图片描述

  • 布局文件





  • 实例代码
// 跳转时,要为每一个共享的view设置对应的transitionName
View fab = findViewById(R.id.fab_button);
View txName = findViewById(R.id.tx_user_name);
intent = new Intent(this, CActivity.class);
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this,
        Pair.create(view, "share"),
        Pair.create(fab, "fab"),
        Pair.create(txName, "user_name"))
        .toBundle());
// 跳转的Activity在onCreate方法中开启Transition模式
public class CActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
        setContentView(R.layout.activity_c);
    }
}
关注
打赏
1658837700
查看更多评论
立即登录/注册

微信扫码登录

1.5616s