写一篇文章很辛苦啊!!!
转载请注明,联系请邮件[email protected]
我学习Android都是结合源代码去学习,这样比较直观,非常清楚的看清效果,觉得很好,今天的学习源码是网上找的源码 百度搜就知道很多下载的地方 网上源码的名字叫:activity切换特效.zip我的博客写的比较乱,如果本篇文章没有看懂,
请先看上篇文章,地址:http://blog.csdn.net/u014737138/article/details/40861929
上篇文章我们学习了animation动画的四种情况,接下来就用这些情况实现一个activity切换的特效
先看小效果,然后在讲原理是怎么实现的:
一。这个应用程序中使用了一种下拉列表控件Spinner
选择样式输入框Spinner,用户不需要手动输入,而是选择 这节里面先不讲这个控件的知识点,关于这点请看我的下篇文章
1.在XML布局文件中定义这个控件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/bg" android:orientation="vertical" android:paddingTop="10dp" > <Spinner android:id="@+id/animation_sp" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#FF1493" > </Spinner> <Button android:id="@+id/other_button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/open" > </Button> </LinearLayout>
这里提供一个XML文件的code,具体的请看我上篇文章的讲解:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="2000" /> <scale android:fromXScale="0.5" android:toXScale="1.5" android:fromYScale="0.5" android:toYScale="1.5" android:pivotX="50%" android:pivotY="50%" android:duration="2000" /> <scale android:fromXScale="1.5" android:toXScale="1.0" android:fromYScale="1.5" android:toYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="200" android:duration="2000" /> </set>
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="anim_type"> <item>淡入淡出效果</item> <item>放大淡出效果</item> <item>转动淡出效果1</item> <item>转动淡出效果2</item> <item>左上角展开淡出效果</item> <item>压缩变小淡出效果</item> <item>右往左推出效果</item> <item>下往上推出效果</item> <item>左右交错效果</item> <item>放大淡出效果</item> <item>缩小效果</item> <item>上下交错效果</item> </string-array> </resources>
二。activity的实现
1.找到下拉框控件和按钮控件
final Spinner mAnimSp = (Spinner) findViewById(R.id.animation_sp); Button mButton=(Button) findViewById(R.id.other_button);
// 通过资源文件获取Spinner填充内容 String[] ls = getResources().getStringArray(R.array.anim_type); List<String> list = new ArrayList<String>(); // 把数组内容填充 到集合 for (int i = 0; i < ls.length; i++) { list.add(ls[i]); }
ArrayAdapter<String> animType = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
关于ArrayAdapter适配器将在下一篇文章中介绍,这里先忽略。
关于参数android.R.layout.simple_spinner_item表示是下拉列表的UI样式,这个属性值代表没有展开,就是一种文本的样式,android.R.layout.simple_spinner_dropdown_item属性代表是一种圆形的样式
这两个参数的意思就讲明白了
4.绑定适配器:
mAnimSp.setAdapter(animType);
mAnimSp.setSelection(0);
当选中一个列表item的时候,该响应的事件了,这里我们是用一个按钮来处理这个响应事件
三。按钮的响应事件
mButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(MaiActivity.this, OtherActivity.class); startActivity(intent); switch (mAnimSp.getSelectedItemPosition()) { case 0: /*注意:此方法只能在startActivity和finish方法之后调用。 第一个参数为第一个Activity离开时的动画,第二参数为所进入的Activity的动画效果*/ overridePendingTransition(R.anim.fade, R.anim.hold); break; case 1: overridePendingTransition(R.anim.my_scale_action, R.anim.my_alpha_action); break; case 2: overridePendingTransition(R.anim.scale_rotate, R.anim.my_alpha_action); break; case 3: overridePendingTransition(R.anim.scale_translate_rotate, R.anim.my_alpha_action); break; case 4: overridePendingTransition(R.anim.scale_translate, R.anim.my_alpha_action); break; case 5: overridePendingTransition(R.anim.hyperspace_in, R.anim.hyperspace_out); break; case 6: overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out); break; case 7: overridePendingTransition(R.anim.push_up_in, R.anim.push_up_out); break; case 8: overridePendingTransition(R.anim.slide_left, R.anim.slide_right); break; case 9: overridePendingTransition(R.anim.wave_scale, R.anim.my_alpha_action); break; case 10: overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit); break; case 11: overridePendingTransition(R.anim.slide_up_in, R.anim.slide_down_out); break; } } });
1.使用意图来控制activity直接的跳转:
Intent intent = new Intent(); intent.setClass(MaiActivity.this, OtherActivity.class); startActivity(intent);2.接下来就是处理下拉列表中的item被选中要处理的效果:
switch (mAnimSp.getSelectedItemPosition()) { case 0: /*注意:此方法只能在startActivity和finish方法之后调用。 第一个参数为第一个Activity离开时的动画,第二参数为所进入的Activity的动画效果*/ overridePendingTransition(R.anim.fade, R.anim.hold); break; case 1: overridePendingTransition(R.anim.my_scale_action, R.anim.my_alpha_action); break;
也就是说这里的执行顺序是严格规定的,
1)找出选中了那个item
mAnimSp.getSelectedItemPosition()2)根据这个item做响应处理,这里主要就是activity切换的效果:
overridePendingTransition(R.anim.fade, R.anim.hold);
第一个参数为第一个Activity离开时的动画,第二参数为所进入的Activity的动画效果
跳转到另外一个activity类中,当返回键被触发的时候:又设定一种退出的效果
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { //如果按下的是返回键,并且没有重复 if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { finish(); overridePendingTransition(R.anim.slide_up_in, R.anim.slide_down_out); return false; } return false; }