前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2014-11-6Android学习------activity切换特效--------动画Animation学习篇

2014-11-6Android学习------activity切换特效--------动画Animation学习篇

作者头像
wust小吴
发布2022-03-07 14:11:56
3420
发布2022-03-07 14:11:56
举报
文章被收录于专栏:风吹杨柳风吹杨柳

我学习Android都是结合源代码去学习,这样比较直观,非常清楚的看清效果,觉得很好,今天的学习源码是网上找的源码 百度搜就知道很多下载的地方 网上源码的名字叫:activity切换特效.zip我的博客写的比较乱,如果本篇文章没有看懂,

请先看上篇文章,地址:http://blog.csdn.net/u014737138/article/details/40861929

上篇文章我们学习了animation动画的四种情况,接下来就用这些情况实现一个activity切换的特效

先看小效果,然后在讲原理是怎么实现的:

一。这个应用程序中使用了一种下拉列表控件Spinner

选择样式输入框Spinner,用户不需要手动输入,而是选择 这节里面先不讲这个控件的知识点,关于这点请看我的下篇文章

1.在XML布局文件中定义这个控件:

代码语言:javascript
复制
<?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>

2.需要预定订好各种动画效果,采用XML的方式

这里提供一个XML文件的code,具体的请看我上篇文章的讲解:

代码语言:javascript
复制
<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>

3.下来列表中的数据需要存在在xml文件中 arrays.xml

代码语言:javascript
复制
<?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.找到下拉框控件和按钮控件

代码语言:javascript
复制
        final Spinner mAnimSp = (Spinner) findViewById(R.id.animation_sp);
        Button mButton=(Button) findViewById(R.id.other_button);

2.给下拉框控件填充内容:

代码语言:javascript
复制
		// 通过资源文件获取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]);
		}

3.填充内容具体实现是需要一个ArrayAdapter适配器的

代码语言:javascript
复制
		ArrayAdapter<String> animType = new ArrayAdapter<String>(this,
				android.R.layout.simple_spinner_item, list);

这行代码的作用就是将list中的数据放在适配器上,接下来就是把这个适配器绑定在下拉列表控件Spinner上就好了

关于ArrayAdapter适配器将在下一篇文章中介绍,这里先忽略。

关于参数android.R.layout.simple_spinner_item表示是下拉列表的UI样式,这个属性值代表没有展开,就是一种文本的样式,android.R.layout.simple_spinner_dropdown_item属性代表是一种圆形的样式

与这样的形式对比下:

这两个参数的意思就讲明白了

4.绑定适配器:

代码语言:javascript
复制
mAnimSp.setAdapter(animType);

5.设置默认的显示:

代码语言:javascript
复制
mAnimSp.setSelection(0);

这样一来,初始化的工作基本完成了,接下来就是需要完成

当选中一个列表item的时候,该响应的事件了,这里我们是用一个按钮来处理这个响应事件

三。按钮的响应事件

代码语言:javascript
复制
		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;
				}
			}
		});

处理方式是调用OnClickListener()接口的回调函数:

1.使用意图来控制activity直接的跳转:

代码语言:javascript
复制
				Intent intent = new Intent();
				intent.setClass(MaiActivity.this, OtherActivity.class);
				startActivity(intent);

2.接下来就是处理下拉列表中的item被选中要处理的效果:

代码语言:javascript
复制
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;

解释中说的很清楚,这里的代码只能在startActivity()和finish()做完之后,系统才会处理被选择中了那个值

也就是说这里的执行顺序是严格规定的,

1)找出选中了那个item

代码语言:javascript
复制
mAnimSp.getSelectedItemPosition()

2)根据这个item做响应处理,这里主要就是activity切换的效果:

代码语言:javascript
复制
overridePendingTransition(R.anim.fade, R.anim.hold);

参数解释:

第一个参数为第一个Activity离开时的动画,第二参数为所进入的Activity的动画效果 跳转到另外一个activity类中,当返回键被触发的时候:又设定一种退出的效果

代码语言:javascript
复制
	@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;
	}

至此这个代码就说完了,接下来看看效果:左上角展开淡出效果

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档