由于看了IOS上面很多开发者开发的APP的视图界面切换动画体验非常好,这些都是IOS自带的,但是Android的Activity等视图切换动画并没有提供原生的,所以特此写了一个可以媲美IOS视图切换动画的Android视图切换动画特效库!SwitchLayout!可以说是目前Android上第一个,也是唯一的一个强大的视图切换动画库引擎!
作者:谭东
没有经过作者允许,不可修改项目库源码自行发布。
如果你的项目中使用了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