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

news/2024/7/6 4:36:03

写一篇文章很辛苦啊!!!

转载请注明,联系请邮件nlp30508@qq.com


我学习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>

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


这里提供一个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>

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

<?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);

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

		// 通过资源文件获取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适配器的

		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.绑定适配器:

mAnimSp.setAdapter(animType);

5.设置默认的显示:

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;
				}
			}
		});

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

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;

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

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

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;
	}

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




http://www.niftyadmin.cn/n/1974379.html

相关文章

springDataJpa 逆向生成实体类图文详解

前言 最近做了几个小demo 是关于sprongDataJpa 的整个框架中用的都是spring的产品也就是全家桶。 通过数据库生成Entity实体&#xff0c;也可以通过Entiy实体转换成数据库表。这里主要说一下&#xff0c;怎样通过数据库表生成Entity实体。所有的操作都是在idea环境下进行的。 …

善变的不只是女人,还有volatile ---偷来的标题名

下面代码包括 2 个函数&#xff0c;第一个函数是中断服务程序用于从温度传感器中读 取数据&#xff0c;第二个函数比较温度是否一致。它是否包括错误&#xff1f;如有&#xff0c;该如何修正&#xff1f; 1 static int iTemperatures[2];2 3 void __IRQ__vReadTemperatures(voi…

Java线程:总结

线程的状态转换图&#xff1a; new&#xff1a;新建状态 Runnable&#xff1a;就绪状态。线程对象创建后&#xff0c;其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中&#xff0c;变得可运行&#xff0c;等待获取CPU的使用权。 Running&#xff1a;运行状态…

class文件的反编译过程

前言 这几天由于工作需要进行了一些反编译的工作&#xff0c;之前的同事离职了&#xff0c;负责的项目代码转交给我&#xff0c;这个项目好长时间没有用了&#xff0c;在看源码的过程中发现里边少了几个类&#xff0c;几经周折找到了以前编译好的jar包。要想恢复就智能进行反编…

2014-11-6Android学习------Spinner下拉选择框控件学习

写一篇文章很辛苦啊&#xff01;&#xff01;&#xff01; 转载请注明&#xff0c;联系请邮件nlp30508qq.com 我学习Android都是结合源代码去学习&#xff0c;这样比较直观&#xff0c;非常清楚的看清效果&#xff0c;觉得很好&#xff0c;今天的学习源码是网上找的源码 百度搜…

诡异的 unnest 函数

为什么80%的码农都做不了架构师&#xff1f;>>> 发现函数 unnest 定义如下&#xff1a; CREATE OR REPLACE FUNCTION unnest(anyarray)RETURNS SETOF anyelement AS array_unnestLANGUAGE internal IMMUTABLE STRICTCOST 1ROWS 100; 为了可读性&#xff0c;这是还原…

简简单单小文章-声明

前言 好长时间也没写文章了&#xff0c;原因有很多&#xff0c;就不在这说了&#xff0c;好不容易有个空了就拿起了java基础翻看着&#xff0c;然后也就有了这篇文章。 正文 java中常用的声明有三种方式&#xff0c;那么这三种方式有什么区别呢&#xff1f;对于jvm熟悉的朋友…

2014-11-6Android学习------Spinner下拉选择框控件学习(二)---监听事件

写一篇文章很辛苦啊&#xff01;&#xff01;&#xff01; 转载请注明&#xff0c;联系请邮件nlp30508qq.com 我学习Android都是结合源代码去学习&#xff0c;这样比较直观&#xff0c;非常清楚的看清效果&#xff0c;觉得很好&#xff0c;今天的学习源码是网上找的源码 百度搜…