Android的Activity切换动画特效库SwitchLayout,视图切换动画库,媲美IOS

由于看了IOS上面很多开发者开发的APP的视图界面切换动画体验非常好,这些都是IOS自带的,但是Android的Activity等视图切换动画并没有提供原生的,所以特此写了一个可以媲美IOS视图切换动画的Android视图切换动画特效库!SwitchLayout!可以说是目前Android上第一个,也是唯一的一个强大的视图切换动画库引擎!


作者:谭东

QQ:852041173

项目开源!推荐使用jar包形式!

没有经过作者允许,不可修改项目库源码自行发布。

如果你的项目中使用了SwtichLayout,建议你在您的APP关于页面注明SwitchLayout库提供支持!非常感谢!如果您觉得SwitchLayout强大,欢迎推荐给你们的朋友。

如果有什么建议,也可以反馈给我,会及时升级SwitchLayout库。


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

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


好了,先看下主要的界面支持的视图切换特效吧!(此为Demo截图)





效果引擎足够媲美IOS了。

里面的列表中,每个特效暴露的自定义扩展特效引擎接口大概可以扩充8个特效。所以一共大概可以扩充105种特效!足够强大!


好了,下面说下大致的用法:

1.导入SwitchLayout1.0.jar或者下载开源库。

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

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


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

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

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

下面贴下SwitchLayoutDemo里的代码:

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

  1. package com.tandong.swichlayoutdemo;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.view.KeyEvent;  
  7. import android.view.View;  
  8. import android.view.View.OnClickListener;  
  9. import android.view.Window;  
  10. import android.widget.ImageView;  
  11.   
  12. import com.tandong.swichlayout.BaseEffects;  
  13. import com.tandong.swichlayout.SwichLayoutInterFace;  
  14. import com.tandong.swichlayout.SwitchLayout;  
  15. import com.tandong.swichlayoutdemo.R;  
  16.   
  17. /** 
  18.  * SwitchLayout 
  19.  *  
  20.  * QQ 852041173 
  21.  *  
  22.  * 为Android提供IOS平台自有的界面视图切换动画而开发此库,工作量也不小,感谢支持SwitchLayout 
  23.  *  
  24.  * @author Tan Dong(谭东) 2014.12.28 
  25.  *  
  26.  */  
  27. public class SecondActivity extends Activity implements SwichLayoutInterFace {  
  28.     private Intent intent;  
  29.     private ImageView iv_back;  
  30.     private int key = 0;  
  31.   
  32.     @Override  
  33.     protected void onCreate(Bundle savedInstanceState) {  
  34.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
  35.         super.onCreate(savedInstanceState);  
  36.         setContentView(R.layout.activity_second);  
  37.         initIntent();  
  38.         // 设置进入Activity的Activity特效动画,同理可拓展为布局动画  
  39.         setEnterSwichLayout();  
  40.     }  
  41.   
  42.     private void initIntent() {  
  43.         intent = getIntent();  
  44.         key = intent.getExtras().getInt("key");  
  45.         iv_back = (ImageView) this.findViewById(R.id.iv_back);  
  46.         iv_back.setOnClickListener(new OnClickListener() {  
  47.   
  48.             @Override  
  49.             public void onClick(View arg0) {  
  50.                 setExitSwichLayout();  
  51.             }  
  52.         });  
  53.     }  
  54.   
  55.     public boolean onKeyDown(int keyCode, KeyEvent event) {// 按返回键时退出Activity的Activity特效动画  
  56.   
  57.         if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {  
  58.             setExitSwichLayout();  
  59.             return true;  
  60.         }  
  61.         return super.onKeyDown(keyCode, event);  
  62.     }  
  63.   
  64.     @Override  
  65.     public void setEnterSwichLayout() {  
  66.         switch (key) {  
  67.         case 0:  
  68.             SwitchLayout.get3DRotateFromLeft(thisfalsenull);  
  69.             // 三个参数分别为(Activity/View,是否关闭Activity,特效(可为空))  
  70.             break;  
  71.         case 1:  
  72.             SwitchLayout.getSlideFromBottom(thisfalse,  
  73.                     BaseEffects.getMoreSlowEffect());  
  74.             break;  
  75.         case 2:  
  76.             SwitchLayout.getSlideFromTop(thisfalse,  
  77.                     BaseEffects.getReScrollEffect());  
  78.             break;  
  79.         case 3:  
  80.             SwitchLayout.getSlideFromLeft(thisfalse,  
  81.                     BaseEffects.getLinearInterEffect());  
  82.             break;  
  83.         case 4:  
  84.             SwitchLayout.getSlideFromRight(thisfalsenull);  
  85.             break;  
  86.         case 5:  
  87.             SwitchLayout.getFadingIn(this);  
  88.             break;  
  89.         case 6:  
  90.             SwitchLayout.ScaleBig(thisfalsenull);  
  91.             break;  
  92.         case 7:  
  93.             SwitchLayout.FlipUpDown(thisfalse,  
  94.                     BaseEffects.getQuickToSlowEffect());  
  95.             break;  
  96.         case 8:  
  97.             SwitchLayout.ScaleBigLeftTop(thisfalsenull);  
  98.             break;  
  99.         case 9:  
  100.             SwitchLayout.getShakeMode(thisfalsenull);  
  101.             break;  
  102.         case 10:  
  103.             SwitchLayout.RotateLeftCenterIn(thisfalsenull);  
  104.             break;  
  105.         case 11:  
  106.             SwitchLayout.RotateLeftTopIn(thisfalsenull);  
  107.             break;  
  108.         case 12:  
  109.             SwitchLayout.RotateCenterIn(thisfalsenull);  
  110.             break;  
  111.         case 13:  
  112.             SwitchLayout.ScaleToBigHorizontalIn(thisfalsenull);  
  113.             break;  
  114.         case 14:  
  115.             SwitchLayout.ScaleToBigVerticalIn(thisfalsenull);  
  116.             break;  
  117.         default:  
  118.             break;  
  119.         }  
  120.   
  121.     }  
  122.   
  123.     @Override  
  124.     public void setExitSwichLayout() {  
  125.         switch (key) {  
  126.         case 0:  
  127.             SwitchLayout.get3DRotateFromRight(thistruenull);  
  128.             break;  
  129.         case 1:  
  130.             SwitchLayout.getSlideToBottom(thistrue,  
  131.                     BaseEffects.getMoreSlowEffect());  
  132.             break;  
  133.         case 2:  
  134.             SwitchLayout.getSlideToTop(thistrue,  
  135.                     BaseEffects.getReScrollEffect());  
  136.             break;  
  137.         case 3:  
  138.             SwitchLayout.getSlideToLeft(thistrue,  
  139.                     BaseEffects.getLinearInterEffect());  
  140.             break;  
  141.         case 4:  
  142.             SwitchLayout.getSlideToRight(thistruenull);  
  143.             break;  
  144.         case 5:  
  145.             SwitchLayout.getFadingOut(thistrue);  
  146.             break;  
  147.         case 6:  
  148.             SwitchLayout.ScaleSmall(thistruenull);  
  149.             break;  
  150.         case 7:  
  151.             SwitchLayout.FlipUpDown(thistrue,  
  152.                     BaseEffects.getQuickToSlowEffect());  
  153.             break;  
  154.         case 8:  
  155.             SwitchLayout.ScaleSmallLeftTop(thistruenull);  
  156.             break;  
  157.         case 9:  
  158.             SwitchLayout.getShakeMode(thistruenull);  
  159.             break;  
  160.         case 10:  
  161.             SwitchLayout.RotateLeftCenterOut(thistruenull);  
  162.             break;  
  163.         case 11:  
  164.             SwitchLayout.RotateLeftTopOut(thistruenull);  
  165.             break;  
  166.         case 12:  
  167.             SwitchLayout.RotateCenterOut(thistruenull);  
  168.             break;  
  169.         case 13:  
  170.             SwitchLayout.ScaleToBigHorizontalOut(thistruenull);  
  171.             break;  
  172.         case 14:  
  173.             SwitchLayout.ScaleToBigVerticalOut(thistruenull);  
  174.             break;  
  175.         default:  
  176.             break;  
  177.         }  
  178.   
  179.     }  
  180.   
  181. }  

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值