• 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(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

  • 相关阅读:
    VLBERT: PRETRAINING OF GENERIC VISUALLINGUISTIC REPRESENTATIONS AHU
    psql客户端连接PG报错“psql error expected authentication request from server, but received v”
    C++ bitset的使用
    利用拓扑排序求 DAG 最短路
    AcWing 1124. 骑马修栅栏
    AcWing 164. 可达性统计
    AcWing 1184. 欧拉回路
    P1339 [USACO09OCT]Heat Wave G
    AcWing 1192. 奖金 [一题三解]
    AcWing 1185. 单词游戏
  • 原文地址:https://www.cnblogs.com/UniqueColor/p/5173319.html
Copyright © 2020-2023  润新知