switchLayout: 1.Activity视图切换库,同时兼容View的动画 2.基础动画特效15个,每个可扩展8个,大概120种特效

可以媲美IOS视图切换动画的Android视图切换动画特效库


SwitchLayout 的1.0jar包下载地址和Demo下载地址:http://pan.baidu.com/s/1dD6baLV

源码和demo在github地址:https://github.com/jaychou2012/SwitchLayout

.每个Activity实现接口implements SwichLayoutInterFace。推荐这种用法;接口里分别实现2个方法:setEnterSwichLayout();和setExitSwichLayout();这两个方法分别是设置进入Activity动画和离开Activity的动画的。

在onCreate()里调用setEnterSwichLayout(); 在关闭Activity操作里调用setExitSwichLayout(); 如果需要的话在onKeyDown里拦截返回按键,调用setExitSwichLayout();

具体特效调用(举一个例子): SwitchLayout.getSlideFromBottom(this, false,BaseEffects.getMoreSlowEffect());

// 三个参数分别为(Activity/View,是否关闭Activity,特效(可为空));每个特效支持8种扩种,也可以不填特效。


.注意,在项目注册清单里,每个Activity要设置主题为透明主题。android:theme="@android:style/Theme.Translucent",API在11以上即可


  1. packagecom.tandong.swichlayoutdemo;
  2. importandroid.app.Activity;
  3. importandroid.content.Intent;
  4. importandroid.os.Bundle;
  5. importandroid.view.View;
  6. importandroid.view.View.OnClickListener;
  7. importandroid.view.Window;
  8. importandroid.widget.Button;
  9. importcom.tandong.swichlayout.BaseEffects;
  10. importcom.tandong.swichlayout.SwitchLayout;
  11. /**
  12. *SwitchLayout
  13. *
  14. *
  15. *为Android提供IOS平台自有的界面视图切换动画而开发此库,工作量也不小,感谢支持SwitchLayout
  16. *
  17. *如果想自定义特效动画时长的话,请在此四个变量对应设置SwitchLayout.animDuration=1000;
  18. *SwitchLayout.longAnimDuration=2000;BaseAnimViewS.animDuration=1000;
  19. *BaseAnimViewS.longAnimDuration=2000;即可。单位毫秒。
  20. *
  21. *以后SwitchLayout将会划分入我的SmartUI库下面
  22. *
  23. *
  24. */
  25. publicclassMainActivityextendsActivity{
  26. privateButtonbtn_ok,btn_1,btn_2,btn_3,btn_4,btn_5,btn_6,btn_7,
  27. btn_8,btn_9,btn_10,btn_11,btn_12,btn_13,btn_14;
  28. @Override
  29. protectedvoidonCreate(BundlesavedInstanceState){
  30. requestWindowFeature(Window.FEATURE_NO_TITLE);
  31. super.onCreate(savedInstanceState);
  32. setContentView(R.layout.activity_main);
  33. initView();
  34. //设置进入Activity的Activity特效动画,同理可拓展为布局动画
  35. SwitchLayout.getSlideFromBottom(this,false,
  36. BaseEffects.getQuickToSlowEffect());
  37. //三个参数分别为(Activity/View,是否关闭Activity,特效(可为空))
  38. initListener();
  39. }
  40. privatevoidinitListener(){
  41. btn_ok.setOnClickListener(newOnClickListener(){
  42. @Override
  43. publicvoidonClick(Viewarg0){
  44. //TODOAuto-generatedmethodstub
  45. Intentin=newIntent(MainActivity.this,SecondActivity.class);
  46. in.putExtra("key",0);
  47. MainActivity.this.startActivity(in);
  48. }
  49. });
  50. btn_1.setOnClickListener(newOnClickListener(){
  51. @Override
  52. publicvoidonClick(Viewarg0){
  53. //TODOAuto-generatedmethodstub
  54. Intentin=newIntent(MainActivity.this,SecondActivity.class);
  55. in.putExtra("key",1);
  56. MainActivity.this.startActivity(in);
  57. }
  58. });
  59. btn_2.setOnClickListener(newOnClickListener(){
  60. @Override
  61. publicvoidonClick(Viewarg0){
  62. //TODOAuto-generatedmethodstub
  63. Intentin=newIntent(MainActivity.this,SecondActivity.class);
  64. in.putExtra("key",2);
  65. MainActivity.this.startActivity(in);
  66. }
  67. });
  68. btn_3.setOnClickListener(newOnClickListener(){
  69. @Override
  70. publicvoidonClick(Viewarg0){
  71. //TODOAuto-generatedmethodstub
  72. Intentin=newIntent(MainActivity.this,SecondActivity.class);
  73. in.putExtra("key",3);
  74. MainActivity.this.startActivity(in);
  75. }
  76. });
  77. btn_4.setOnClickListener(newOnClickListener(){
  78. @Override
  79. publicvoidonClick(Viewarg0){
  80. //TODOAuto-generatedmethodstub
  81. Intentin=newIntent(MainActivity.this,SecondActivity.class);
  82. in.putExtra("key",4);
  83. MainActivity.this.startActivity(in);
  84. }
  85. });
  86. btn_5.setOnClickListener(newOnClickListener(){
  87. @Override
  88. publicvoidonClick(Viewarg0){
  89. //TODOAuto-generatedmethodstub
  90. Intentin=newIntent(MainActivity.this,SecondActivity.class);
  91. in.putExtra("key",5);
  92. MainActivity.this.startActivity(in);
  93. }
  94. });
  95. btn_6.setOnClickListener(newOnClickListener(){
  96. @Override
  97. publicvoidonClick(Viewarg0){
  98. //TODOAuto-generatedmethodstub
  99. Intentin=newIntent(MainActivity.this,SecondActivity.class);
  100. in.putExtra("key",6);
  101. MainActivity.this.startActivity(in);
  102. }
  103. });
  104. btn_7.setOnClickListener(newOnClickListener(){
  105. @Override
  106. publicvoidonClick(Viewarg0){
  107. //TODOAuto-generatedmethodstub
  108. Intentin=newIntent(MainActivity.this,SecondActivity.class);
  109. in.putExtra("key",7);
  110. MainActivity.this.startActivity(in);
  111. }
  112. });
  113. btn_8.setOnClickListener(newOnClickListener(){
  114. @Override
  115. publicvoidonClick(Viewarg0){
  116. //TODOAuto-generatedmethodstub
  117. Intentin=newIntent(MainActivity.this,SecondActivity.class);
  118. in.putExtra("key",8);
  119. MainActivity.this.startActivity(in);
  120. }
  121. });
  122. btn_9.setOnClickListener(newOnClickListener(){
  123. @Override
  124. publicvoidonClick(Viewarg0){
  125. //TODOAuto-generatedmethodstub
  126. Intentin=newIntent(MainActivity.this,SecondActivity.class);
  127. in.putExtra("key",9);
  128. MainActivity.this.startActivity(in);
  129. }
  130. });
  131. btn_10.setOnClickListener(newOnClickListener(){
  132. @Override
  133. publicvoidonClick(Viewarg0){
  134. //TODOAuto-generatedmethodstub
  135. Intentin=newIntent(MainActivity.this,SecondActivity.class);
  136. in.putExtra("key",10);
  137. MainActivity.this.startActivity(in);
  138. }
  139. });
  140. btn_11.setOnClickListener(newOnClickListener(){
  141. @Override
  142. publicvoidonClick(Viewarg0){
  143. //TODOAuto-generatedmethodstub
  144. Intentin=newIntent(MainActivity.this,SecondActivity.class);
  145. in.putExtra("key",11);
  146. MainActivity.this.startActivity(in);
  147. }
  148. });
  149. btn_12.setOnClickListener(newOnClickListener(){
  150. @Override
  151. publicvoidonClick(Viewarg0){
  152. //TODOAuto-generatedmethodstub
  153. Intentin=newIntent(MainActivity.this,SecondActivity.class);
  154. in.putExtra("key",12);
  155. MainActivity.this.startActivity(in);
  156. }
  157. });
  158. btn_13.setOnClickListener(newOnClickListener(){
  159. @Override
  160. publicvoidonClick(Viewarg0){
  161. //TODOAuto-generatedmethodstub
  162. Intentin=newIntent(MainActivity.this,SecondActivity.class);
  163. in.putExtra("key",13);
  164. MainActivity.this.startActivity(in);
  165. }
  166. });
  167. btn_14.setOnClickListener(newOnClickListener(){
  168. @Override
  169. publicvoidonClick(Viewarg0){
  170. //TODOAuto-generatedmethodstub
  171. Intentin=newIntent(MainActivity.this,SecondActivity.class);
  172. in.putExtra("key",14);
  173. MainActivity.this.startActivity(in);
  174. }
  175. });
  176. }
  177. privatevoidinitView(){
  178. btn_ok=(Button)this.findViewById(R.id.btn_ok);
  179. btn_1=(Button)this.findViewById(R.id.btn_1);
  180. btn_2=(Button)this.findViewById(R.id.btn_2);
  181. btn_3=(Button)this.findViewById(R.id.btn_3);
  182. btn_4=(Button)this.findViewById(R.id.btn_4);
  183. btn_5=(Button)this.findViewById(R.id.btn_5);
  184. btn_6=(Button)this.findViewById(R.id.btn_6);
  185. btn_7=(Button)this.findViewById(R.id.btn_7);
  186. btn_8=(Button)this.findViewById(R.id.btn_8);
  187. btn_9=(Button)this.findViewById(R.id.btn_9);
  188. btn_10=(Button)this.findViewById(R.id.btn_10);
  189. btn_11=(Button)this.findViewById(R.id.btn_11);
  190. btn_12=(Button)this.findViewById(R.id.btn_12);
  191. btn_13=(Button)this.findViewById(R.id.btn_13);
  192. btn_14=(Button)this.findViewById(R.id.btn_14);
  193. }
  194. }

[java] view plain copy
  1. packagecom.tandong.swichlayoutdemo;
  2. importandroid.app.Activity;
  3. importandroid.content.Intent;
  4. importandroid.os.Bundle;
  5. importandroid.view.KeyEvent;
  6. importandroid.view.View;
  7. importandroid.view.View.OnClickListener;
  8. importandroid.view.Window;
  9. importandroid.widget.ImageView;
  10. importcom.tandong.swichlayout.BaseEffects;
  11. importcom.tandong.swichlayout.SwichLayoutInterFace;
  12. importcom.tandong.swichlayout.SwitchLayout;
  13. importcom.tandong.swichlayoutdemo.R;
  14. /**
  15. *SwitchLayout
  16. *
  17. *为Android提供IOS平台自有的界面视图切换动画而开发此库,工作量也不小,感谢支持SwitchLayout
  18. *
  19. *
  20. */
  21. publicclassSecondActivityextendsActivityimplementsSwichLayoutInterFace{
  22. privateIntentintent;
  23. privateImageViewiv_back;
  24. privateintkey=0;
  25. @Override
  26. protectedvoidonCreate(BundlesavedInstanceState){
  27. requestWindowFeature(Window.FEATURE_NO_TITLE);
  28. super.onCreate(savedInstanceState);
  29. setContentView(R.layout.activity_second);
  30. initIntent();
  31. //设置进入Activity的Activity特效动画,同理可拓展为布局动画
  32. setEnterSwichLayout();
  33. }
  34. privatevoidinitIntent(){
  35. intent=getIntent();
  36. key=intent.getExtras().getInt("key");
  37. iv_back=(ImageView)this.findViewById(R.id.iv_back);
  38. iv_back.setOnClickListener(newOnClickListener(){
  39. @Override
  40. publicvoidonClick(Viewarg0){
  41. setExitSwichLayout();
  42. }
  43. });
  44. }
  45. publicbooleanonKeyDown(intkeyCode,KeyEventevent){//按返回键时退出Activity的Activity特效动画
  46. if(keyCode==KeyEvent.KEYCODE_BACK&&event.getRepeatCount()==0){
  47. setExitSwichLayout();
  48. returntrue;
  49. }
  50. returnsuper.onKeyDown(keyCode,event);
  51. }
  52. @Override
  53. publicvoidsetEnterSwichLayout(){
  54. switch(key){
  55. case0:
  56. SwitchLayout.get3DRotateFromLeft(this,false,null);
  57. //三个参数分别为(Activity/View,是否关闭Activity,特效(可为空))
  58. break;
  59. case1:
  60. SwitchLayout.getSlideFromBottom(this,false,
  61. BaseEffects.getMoreSlowEffect());
  62. break;
  63. case2:
  64. SwitchLayout.getSlideFromTop(this,false,
  65. BaseEffects.getReScrollEffect());
  66. break;
  67. case3:
  68. SwitchLayout.getSlideFromLeft(this,false,
  69. BaseEffects.getLinearInterEffect());
  70. break;
  71. case4:
  72. SwitchLayout.getSlideFromRight(this,false,null);
  73. break;
  74. case5:
  75. SwitchLayout.getFadingIn(this);
  76. break;
  77. case6:
  78. SwitchLayout.ScaleBig(this,false,null);
  79. break;
  80. case7:
  81. SwitchLayout.FlipUpDown(this,false,
  82. BaseEffects.getQuickToSlowEffect());
  83. break;
  84. case8:
  85. SwitchLayout.ScaleBigLeftTop(this,false,null);
  86. break;
  87. case9:
  88. SwitchLayout.getShakeMode(this,false,null);
  89. break;
  90. case10:
  91. SwitchLayout.RotateLeftCenterIn(this,false,null);
  92. break;
  93. case11:
  94. SwitchLayout.RotateLeftTopIn(this,false,null);
  95. break;
  96. case12:
  97. SwitchLayout.RotateCenterIn(this,false,null);
  98. break;
  99. case13:
  100. SwitchLayout.ScaleToBigHorizontalIn(this,false,null);
  101. break;
  102. case14:
  103. SwitchLayout.ScaleToBigVerticalIn(this,false,null);
  104. break;
  105. default:
  106. break;
  107. }
  108. }
  109. @Override
  110. publicvoidsetExitSwichLayout(){
  111. switch(key){
  112. case0:
  113. SwitchLayout.get3DRotateFromRight(this,true,null);
  114. break;
  115. case1:
  116. SwitchLayout.getSlideToBottom(this,true,
  117. BaseEffects.getMoreSlowEffect());
  118. break;
  119. case2:
  120. SwitchLayout.getSlideToTop(this,true,
  121. BaseEffects.getReScrollEffect());
  122. break;
  123. case3:
  124. SwitchLayout.getSlideToLeft(this,true,
  125. BaseEffects.getLinearInterEffect());
  126. break;
  127. case4:
  128. SwitchLayout.getSlideToRight(this,true,null);
  129. break;
  130. case5:
  131. SwitchLayout.getFadingOut(this,true);
  132. break;
  133. case6:
  134. SwitchLayout.ScaleSmall(this,true,null);
  135. break;
  136. case7:
  137. SwitchLayout.FlipUpDown(this,true,
  138. BaseEffects.getQuickToSlowEffect());
  139. break;
  140. case8:
  141. SwitchLayout.ScaleSmallLeftTop(this,true,null);
  142. break;
  143. case9:
  144. SwitchLayout.getShakeMode(this,true,null);
  145. break;
  146. case10:
  147. SwitchLayout.RotateLeftCenterOut(this,true,null);
  148. break;
  149. case11:
  150. SwitchLayout.RotateLeftTopOut(this,true,null);
  151. break;
  152. case12:
  153. SwitchLayout.RotateCenterOut(this,true,null);
  154. break;
  155. case13:
  156. SwitchLayout.ScaleToBigHorizontalOut(this,true,null);
  157. break;
  158. case14:
  159. SwitchLayout.ScaleToBigVerticalOut(this,true,null);
  160. break;
  161. default:
  162. break;
  163. }
  164. }
  165. }

[java] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <manifestxmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.tandong.swichlayoutdemo"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <uses-sdk
  7. android:minSdkVersion="11"
  8. android:targetSdkVersion="19"/>
  9. <application
  10. android:allowBackup="true"
  11. android:icon="@drawable/ic_launcher"
  12. android:label="@string/app_name"
  13. android:theme="@style/AppTheme">
  14. <activity
  15. android:name="com.tandong.swichlayoutdemo.MainActivity"
  16. android:label="@string/app_name"
  17. android:theme="@android:style/Theme.Translucent">
  18. <intent-filter>
  19. <actionandroid:name="android.intent.action.MAIN"/>
  20. <categoryandroid:name="android.intent.category.LAUNCHER"/>
  21. </intent-filter>
  22. </activity>
  23. <activity
  24. android:name="com.tandong.swichlayoutdemo.SecondActivity"
  25. android:launchMode="singleTask"
  26. android:theme="@android:style/Theme.Translucent">
  27. </activity>
  28. </application>
  29. </manifest>


更多相关文章

  1. Android(安卓)CoordinatorLayout+AppBarLayout实现toolbar背景渐
  2. Android(安卓)安卓动画 属性动画 - 组合动画
  3. vlayout使用说明(二)
  4. Android补间动画
  5. View视图绘制流程,View工作原理(二)
  6. Android——MVP架构
  7. Android开机动画 (boot animation)制作
  8. Android三种常用动画分享(2)--补间动画
  9. Android的Animation之LayoutAnimation使用方法(控件设置动画)

随机推荐

  1. 转:[Android]实现静默安装APK的两种方法
  2. 第十一篇 ANDROID 系统网络连接和管理机
  3. [安卓基础] 003.建立你的第一个App
  4. 【30篇突击 android】源码统计 十八
  5. Android动态加载Dex技术基础
  6. Android(安卓)Studio1.5使用和学习记录
  7. 【译】使用Kotlin从零开始写一个现代Andr
  8. Android之Goldfish
  9. android studio 设置编译apk的名称以及配
  10. Android市场官方的统计信息