Material Design学习(三)
来源:互联网 发布:网络活动策划书 编辑:程序博客网 时间:2024/05/19 22:44
Activity Transition
这个看上去效果赞极了,首先偷张图。 <style name="myTheme" parent="android:Theme.Material"> <!-- 允许使用transitions --> <item name="android:windowContentTransitions">true</item> <!-- 指定进入和退出transitions --> <item name="android:windowEnterTransition">@transition/explode</item> <item name="android:windowExitTransition">@transition/explode</item> <!-- 指定shared element transitions --> <item name="android:windowSharedElementEnterTransition"> @transition/change_image_transform</item> <item name="android:windowSharedElementExitTransition"> @transition/change_image_transform</item> </style>
接着你就需要修改AndroidManifest.xml
修改成 android:theme="@style/myTheme"
。
然后你需要新建一个Directory
名为transition
(在res
文件夹下),然后在里面创建相应的文件。比如explode.xml
.修改如下:
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"> <explode/> </transitionSet>
你要写别的效果你可以再创建,修改里面得属性改成你需要的属性即可。
然后你需要创建一个新的Activity,创建好了就需要写两个Activity跳转的代码了。在MainActivity.java
中设置按钮的点击事件跳转至另一个Activity。这里可以设置它的ExitTransition
,在setContentView
之前添加如下代码就行。
// 允许使用transitions getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); // 设置一个exit transition getWindow().setExitTransition(new Explode());
这里效果不是很好看出来,在你添加的另一个Activity中,同样在setContentView
之前添加:
// 允许使用transitions getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); // 设置一个exit transition getWindow().setEnterTransition(new Explode());
然后你跳转时需要使用:
Intent intent1 = new Intent(MainActivity.this, ExplodeActivity.class);startActivity(intent1, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
这样就可以很清楚的看到你跳转到另一个Activity时就会有Explode\Fade\Slide
的效果(修改setEnterTransition里面的参数即可)。
这里我发现了一些问题,在style.xml中我们设置了windowEnterTransition
而在代码中我们也setEnterTransition
两个会不会起冲突?不会,你最后给Acitivity设置了什么Transition它就是什么。所以style.xml
里应该算是设置默认setEnterTransition
是什么Transition了。这也意味着可以通过xml和代码两种方式设置setEntransition
。而且我发现只要你使用了主题android:Theme.Material
就算你不在style.xml
和代码里写Content Transition
的相关设置代码,你只需要在跳转的时候使用:
startActivity(intent1, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
你就可以看到Activity Transition
的效果了,默认是Fade效果。
下面介绍下Share Element Transition
,上面的链接中有对这个做介绍的,大家看看我这里就不写了。
在MainActivity.java
的布局文件activity_main.xml
中加入:
<Button android:id="@+id/shareElememt" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="shareElement测试按钮" android:transitionName="shareView" android:layout_weight="1" /> ```注意这里的一个属性`android:transitionName="shareView"`。在另一个你要共享元素传递到的那个`Activity`的布局文件中加入```xml<Button android:id="@+id/btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="shareElement测试按钮" android:transitionName="shareView" android:layout_weight="1" /><Space android:layout_width="match_parent" android:layout_height="1dp" android:layout_weight="1"/><Space android:layout_width="match_parent" android:layout_height="1dp" android:layout_weight="1"/><Space android:layout_width="match_parent" android:layout_height="1dp" android:layout_weight="1"/> ```可以看到我们这里的`Button`同样添加了上面的属性。正如链接里说的:**共享元素变换并不是真正实现了两个activity或者Fragment之间元素的共享,实际上我们看到的几乎所有变换效果中(不管是B进入还是B返回A),共享元素都是在B中绘制出来的。Framework没有真正试图将A中的某个元素传递给B,而是采用了不同的方法来达到相同的视觉效果。A传递给B的是共享元素的状态信息。B利用这些信息来初始化共享View元素,让它们的位置、大小、外观与在A中的时候完全一致。当变换开始的时候,B中除了共享元素之外,所有的其他元素都是不可见的。随着动画的进行,framework 逐渐将B的activity窗口显示出来,当动画完成,B的窗口才完全可见。**然后在`MainActivity.java`中设置Button的点击事件。<div class="se-preview-section-delimiter"></div>```javaIntent intent4 = new Intent(MainActivity.this, ShareElememtActivity.class);ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(MainActivity.this, v, "shareView" );startActivity(intent4, options.toBundle());
同样在跳转的那个Activity中设置Button的点击事件。
btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent4 = new Intent(ShareElememtActivity.this, MainActivity.class); ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(ShareElememtActivity.this, v, "shareView" ); startActivity(intent4, options.toBundle()); }});
最后效果如下:
根据我的介绍应该可以一步一步拼凑出来,需要源码的同学可以去:
http://download.csdn.net/detail/cuihaoren01/9506615
- Material Design学习(三)
- Android Material Design学习之三TabLayout
- Material Design Lite 学习(三) 网格
- Material Design(三)
- Material design学习笔记
- Material Design学习
- Material Design学习地址
- Material Design学习摘录
- Material Design学习
- Material design学习笔记
- 学习Material Design Support
- material design学习笔记
- Material Design学习
- Material Design的学习
- Material Design学习1
- Material Design学习2
- Material Design学习3
- Material Design学习4
- Docker —— 用于统一开发和部署的轻量级 Linux 容器
- CentOS虚拟机中安装VMWare Tools
- AtomicInteger简介
- js处理json数组
- eclipse中ant的安装
- Material Design学习(三)
- [精]Oracle 内存结构详解
- 设计模式-适配器模式
- 排序算法
- 调试器工作原理(1):基础篇
- 机器学习之——归一化线性回归与归一化逻辑回归
- js 弹出确认 取消对话框
- hibernate之实体粒度设计
- hdu 1688 Sightseeing