由于看了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(this, false,   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 }  
View Code
  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(this, false, null);   69             // 三个参数分别为(Activity/View,是否关闭Activity,特效(可为空))   70             break;   71         case 1:   72             SwitchLayout.getSlideFromBottom(this, false,   73                     BaseEffects.getMoreSlowEffect());   74             break;   75         case 2:   76             SwitchLayout.getSlideFromTop(this, false,   77                     BaseEffects.getReScrollEffect());   78             break;   79         case 3:   80             SwitchLayout.getSlideFromLeft(this, false,   81                     BaseEffects.getLinearInterEffect());   82             break;   83         case 4:   84             SwitchLayout.getSlideFromRight(this, false, null);   85             break;   86         case 5:   87             SwitchLayout.getFadingIn(this);   88             break;   89         case 6:   90             SwitchLayout.ScaleBig(this, false, null);   91             break;   92         case 7:   93             SwitchLayout.FlipUpDown(this, false,   94                     BaseEffects.getQuickToSlowEffect());   95             break;   96         case 8:   97             SwitchLayout.ScaleBigLeftTop(this, false, null);   98             break;   99         case 9:  100             SwitchLayout.getShakeMode(this, false, null);  101             break;  102         case 10:  103             SwitchLayout.RotateLeftCenterIn(this, false, null);  104             break;  105         case 11:  106             SwitchLayout.RotateLeftTopIn(this, false, null);  107             break;  108         case 12:  109             SwitchLayout.RotateCenterIn(this, false, null);  110             break;  111         case 13:  112             SwitchLayout.ScaleToBigHorizontalIn(this, false, null);  113             break;  114         case 14:  115             SwitchLayout.ScaleToBigVerticalIn(this, false, null);  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(this, true, null);  128             break;  129         case 1:  130             SwitchLayout.getSlideToBottom(this, true,  131                     BaseEffects.getMoreSlowEffect());  132             break;  133         case 2:  134             SwitchLayout.getSlideToTop(this, true,  135                     BaseEffects.getReScrollEffect());  136             break;  137         case 3:  138             SwitchLayout.getSlideToLeft(this, true,  139                     BaseEffects.getLinearInterEffect());  140             break;  141         case 4:  142             SwitchLayout.getSlideToRight(this, true, null);  143             break;  144         case 5:  145             SwitchLayout.getFadingOut(this, true);  146             break;  147         case 6:  148             SwitchLayout.ScaleSmall(this, true, null);  149             break;  150         case 7:  151             SwitchLayout.FlipUpDown(this, true,  152                     BaseEffects.getQuickToSlowEffect());  153             break;  154         case 8:  155             SwitchLayout.ScaleSmallLeftTop(this, true, null);  156             break;  157         case 9:  158             SwitchLayout.getShakeMode(this, true, null);  159             break;  160         case 10:  161             SwitchLayout.RotateLeftCenterOut(this, true, null);  162             break;  163         case 11:  164             SwitchLayout.RotateLeftTopOut(this, true, null);  165             break;  166         case 12:  167             SwitchLayout.RotateCenterOut(this, true, null);  168             break;  169         case 13:  170             SwitchLayout.ScaleToBigHorizontalOut(this, true, null);  171             break;  172         case 14:  173             SwitchLayout.ScaleToBigVerticalOut(this, true, null);  174             break;  175         default:  176             break;  177         }  178   179     }  180   181 }  
View Code
 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>  
View Code

更多相关文章

  1. Android(安卓)Activity界面切换添加动画特效
  2. android实现字体闪烁动画的方法
  3. android中文api(89)——ViewManager
  4. Android中的FILL_PARENT与WRAP_CONTENT的区别
  5. android用户界面-组件Widget-地图视图MapView
  6. Android(安卓)中文API(86)——ResourceCursorAdapter
  7. Android:interpolator用法
  8. android用户界面-组件Widget-画廊视图Gallery
  9. android 中文api (62) —— ViewSwitcher.ViewFactory

随机推荐

  1. 如何用PHP代码生成金字塔
  2. PHP路由库FastRoute的使用教程
  3. PHP日期时间快速入门(图文详解)
  4. PHP简单实现路由Route功能
  5. PHP中你必须了解的4种Array函数
  6. Mac电脑设置hosts的方法(图文步骤)
  7. 浅谈PHP连接MySQL数据库的三种方式
  8. PHP常用日期时间操作合集
  9. PHP开发者如何做好密码保护以及Laravel底
  10. PHP生成图形验证码(加强干扰型)