博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发之Activity转场动画
阅读量:6442 次
发布时间:2019-06-23

本文共 3455 字,大约阅读时间需要 11 分钟。

引子

相信开发过iOS的程序员都知道iOS ViewController之间的跳转动画非常多,很酷对不对?这让开发Android的羡慕不已,曾几何时,Android中的Activity跳转是何等的生硬,But,在Android 5.0以后,Google也为Activity的转场设计了更加友好的动画效果。

转场动画(Activity Transition)基本介绍

Android 5.0 提供了三种Transition类型

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

进入和退出包含如下动画效果
  • explode(分解) – 从屏幕中间进或出
  • slide(滑动) - 从屏幕边缘进或出地
  • fade(淡出) –通过改变屏幕上视图的不透明度达到添加或者移除视图的效果
共享元素包含如下动画效果
  • changeBounds - 改变目标视图的布局边界
  • changeClipBounds - 裁剪目标视图边界
  • changeTransform - 改变目标视图的缩放比例和旋转角度
  • changeImageTransform - 改变目标图片的大小和缩放比例
实践

1.准备好2个Activity的布局,弄几个按钮,分别对应几种转场动画。

activity_one.xml ActivityOne的布局,其中最后一个Button是为了做共享元素动画

activity_two.xml ActivityTwo的布局,里面的Button与第一个布局中的最后一个Button呼应,只是大小不一样

2.ActivityOne 与 ActivityTwo

ActivityOne.java

public class ActivityOne extends Activity {    private Intent intent;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_one);        intent = new Intent(ActivityOne.this, ActivityTwo.class);    }    public void explode(View view) {        intent.putExtra("transition", "explode");        //将原先的跳转改成如下方式        startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(ActivityOne.this).toBundle());    }    public void slide(View view) {        intent.putExtra("transition", "slide");        //将原先的跳转改成如下方式        startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(ActivityOne.this).toBundle());    }    public void fade(View view) {        intent.putExtra("transition", "fade");        //将原先的跳转改成如下方式        startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(ActivityOne.this).toBundle());    }    public void share(View view) {        //共享元素        Button share = (Button) findViewById(R.id.share);        intent.putExtra("transition", "share");        //将原先的跳转改成如下方式,注意这里面的第三个参数决定了ActivityTwo 布局中的android:transitionName的值,它们要保持一致        startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(ActivityOne.this, share, "shareTransition").toBundle());    }}

ActivityTwo.java

public class ActivityTwo extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // 允许使用transitions        getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);        String transition = getIntent().getStringExtra("transition");        switch (transition) {            case "explode":                // 设置进入时进入动画                Explode explode = new Explode();                explode.setDuration(1000);                getWindow().setEnterTransition(explode);                break;            case "slide":                Slide slide = new Slide();                slide.setDuration(1000);                getWindow().setEnterTransition(slide);                break;            case "fade":                Fade fade = new Fade();                fade.setDuration(1000);                getWindow().setEnterTransition(fade);                break;            case "share":                break;        }        // 所有操作在设置内容视图之前        setContentView(R.layout.activity_two);    }}

说明:

getWindow().setEnterTransition()是进入动画,与之对应的getWindow().setExitTransition()就是退出转场动画,用法和上面一样,就不重复了

3.测试效果

explode

img_daee18fe911c5d7c9081e29d894a8fcd.gif
explode.gif
slide

img_141e7b65b03cc10ef044f02ec48ff4dc.gif
slide.gif

fade

img_ad08c963f84b9183346b805db699d0e5.gif
fade.gif
share

img_66a4425c4a2e55c7121286baee476693.gif
share.gif
问题

explode效果感觉并没有从中间进,而是从上面下来的,这是为什么呢?欢迎知道的告知,感谢。

转载地址:http://fscwo.baihongyu.com/

你可能感兴趣的文章
linux和windows互传文件、用户配置文件和密码配置文件、用户组管理、用户管理...
查看>>
spark 应用程序性能优化经验
查看>>
基于Zabbix IPMI监控服务器硬件状况
查看>>
Go语言之并发资源竞争
查看>>
mac本显示隐藏文件或关闭显示隐藏文件
查看>>
spring4.0 整合 Quartz 实现任务调度(一)
查看>>
android复杂布局的一点思路
查看>>
Awesome Python
查看>>
java web简单权限管理设计
查看>>
Google Analytics
查看>>
【转】什么是云计算
查看>>
MySQL 5.7及以上解压缩版本配置安装
查看>>
Extjs4.0 Chart属性中文解释
查看>>
PHP单例模式的实现
查看>>
httpClient post 数据传输和处理
查看>>
newLISP你也行 --- 字符串
查看>>
【译】Swift 2.0 下面向协议的MVVM架构实践
查看>>
html5拖拽
查看>>
Android工具HierarchyViewer 代码导读(2) -- 建立Eclipse调试环境
查看>>
GC配置对性能的帮助
查看>>