Android高级UI开发(二十七)Material Design之转场动画(一)

举报
yd_57386892 发表于 2020/12/29 01:07:38 2020/12/29
【摘要】 什么是转场动画,我们先看一副动图: 当我们点击第一个“湖面”缩略图时,跳转到第二个页面时有一个从左上角扩展图片的动画,而且这2张图片展示的是同一个内容元素,给用户一个很好的过渡效果,平滑的从第一个页面过渡到第二个页面。 今天我们用一些简单的实例来展示一下转场动画如何实现,我们接下来要实现的第一个转场动画效果如下:   我们来看一下这里面是如何实现的(源码下载地...

什么是转场动画,我们先看一副动图:

当我们点击第一个“湖面”缩略图时,跳转到第二个页面时有一个从左上角扩展图片的动画,而且这2张图片展示的是同一个内容元素,给用户一个很好的过渡效果,平滑的从第一个页面过渡到第二个页面。

今天我们用一些简单的实例来展示一下转场动画如何实现,我们接下来要实现的第一个转场动画效果如下:

 

我们来看一下这里面是如何实现的(源码下载地址:https://download.csdn.net/download/gaoxiaoweiandy/11097376).

1. 布局文件

这里为了转场我们有MainActivity 与  SecondActivity共两个页面。第一个页面展示小图,第二个页面展示大图。因此我们就有2个布局:

activity_main.xml:


  
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:background="#ffffff"
  6. xmlns:app="http://schemas.android.com/apk/res-auto">
  7. <android.support.v7.widget.Toolbar
  8. android:id="@+id/toolbar"
  9. android:layout_width="match_parent"
  10. android:layout_height="wrap_content"
  11. android:background="?attr/colorPrimary"
  12. app:title="转场动画"
  13. app:titleTextColor="#ffffff"
  14. app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
  15. />
  16. <ImageView
  17. android:layout_margin="10dp"
  18. android:layout_below="@+id/toolbar"
  19. android:id="@+id/iv1"
  20. android:layout_width="200dp"
  21. android:layout_height="wrap_content"
  22. android:scaleType="centerCrop"
  23. android:transitionName="iv_jackson"
  24. android:src="@mipmap/jack1" />
  25. <Button
  26. android:layout_alignParentRight="true"
  27. android:layout_below="@+id/iv1"
  28. android:id="@+id/btTransition"
  29. android:layout_width="wrap_content"
  30. android:layout_height="wrap_content"
  31. android:transitionName="bt"
  32. android:text="转场" />
  33. </RelativeLayout>

acitivty_second.xml:


  
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. xmlns:app="http://schemas.android.com/apk/res-auto">
  6. <android.support.v7.widget.Toolbar
  7. android:id="@+id/toolbar"
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content"
  10. android:background="?attr/colorPrimary"
  11. app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
  12. app:title="网易新闻"
  13. app:titleTextColor="#ff0" />
  14. <ImageView
  15. android:id="@+id/iv1"
  16. android:layout_width="match_parent"
  17. android:layout_height="match_parent"
  18. android:scaleType="centerCrop"
  19. android:src="@mipmap/jack2"
  20. android:transitionName="iv_jackson" />
  21. <Button
  22. android:id="@+id/btBack"
  23. android:layout_width="wrap_content"
  24. android:layout_height="wrap_content"
  25. android:layout_alignParentBottom="true"
  26. android:layout_alignParentRight="true"
  27. android:text="返回偶像"
  28. android:transitionName="bt" />
  29. </RelativeLayout>

 

第一个布局的imageview展示杰克逊的缩略图,然后可以点击BUTTON来跳转到第二个页面。

第二个布局也有一个imageview用来展示杰克逊的大图,然后点击BUTTON可以返回到第一个页面。

要实现从缩略图到大图的转场过渡动画,我们是否发现两个布局里的imageview的android:transitionName这个属性值是相同的,这个transitionName就叫做共享元素,它是两个页面中2个imageview的纽带,是实现转场动画的关键。只有两个页面中的Imageview的android:transitionName名字相同,才能展示出转场效果。当然这里是以Imageview举例而已,像其它的布局BUTTON等也可以实现转场效果。OK,我们设置了共享元素,接下来我们看代码里如何处理,才能驱动起来这个动画。我们先看一下MainActivity.java中的代码。

2. 代码

2.1 第一个页面MainActivity.java


  
  1. btTransition.setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View v) {
  4. ActivityOptionsCompat optionsCompat =
  5. ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity.this, iv1,"iv_jackson");
  6. Intent intent = new Intent(MainActivity.this, SecondActivity.class);
  7. MainActivity.this.startActivity(intent, optionsCompat.toBundle());
  8. }
  9. });

我们主要看一下“转场”按钮,单击它跳转到SecondActivity页面同时执行过渡的转场动画。这里我们startAcitivity比平时多了一个参数,那就是ActivityOptionsCompt,这个对象又由makeSceneTransitionAnimation函数创建,我们来看一下makeSceneTransitionAnimation的各个参数:

参数1:当前页面上下文,MainActivity.this.

参数2:要实现转场的控件,这里我们是imageview id = iv1

参数3:就是共享元素名,就是前面所讲述的2个页面中的2个imagview公有的transitionName.

这样就创建了一个页面转场动画的ActivityOptionsCompat配置项对象,将这个对象代入startAcitivty就实现了页面之间跳转时的转场动画。 

2.2 第二个页面SecondActivity.java

在acitivty_second.xml布局里我们定义了一个“返回偶像”的按钮,点击 它可以返回到MainActivity.java,同时也让返回跳转页面的同时执行转场动画,这里我们只需在“返回偶像”的按钮的单击响应函数里调研“onBackPress()”函数。因为该函数里也实现了类似2.1中的startActivity,也就是说api已经为我们写好了转场代码。执行的动画效果就是:第二个页面中的大图片向第一个页面中小图位置的方向上逐渐缩小。

今天我们对转场动画有了一个初步认识,并且用实例介绍了共享元素, 明天我们去研究一下多个共享元素的转场动画.

(源码下载地址:https://download.csdn.net/download/gaoxiaoweiandy/11097376).

 

文章来源: blog.csdn.net,作者:冉航--小虾米,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/gaoxiaoweiandy/article/details/89022940

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。