因爲看了IOS上面不少開發者開發的APP的視圖界面切換動畫體驗很是好,這些都是IOS自帶的,可是Android的Activity等視圖切換動畫並無提供原生的,因此特此寫了一個能夠媲美IOS視圖切換動畫的Android視圖切換動畫特效庫!SwitchLayout!能夠說是目前Android上第一個,也是惟一的一個強大的視圖切換動畫庫引擎!android
做者:譚東git
QQ:852041173github
項目開源!推薦使用jar包形式!app
沒有通過做者容許,不可修改項目庫源碼自行發佈。ide
若是你的項目中使用了SwtichLayout,建議你在您的APP關於頁面註明SwitchLayout庫提供支持!很是感謝!若是您以爲SwitchLayout強大,歡迎推薦給大家的朋友。佈局
若是有什麼建議,也能夠反饋給我,會及時升級SwitchLayout庫。動畫
SwitchLayout 的1.0jar包下載地址和Demo下載地址:http://pan.baidu.com/s/1dD6baLVui
源碼和demo在github地址:https://github.com/jaychou2012/SwitchLayoutthis
好了,先看下主要的界面支持的視圖切換特效吧!(此爲Demo截圖)spa
、
效果引擎足夠媲美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 }
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 }
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>