android学习-动画(用户指南的应用)

在安装完apk之后,通常第一次打开都会有一个用户指南给用户查看,一般都是左右滑动式的,主要放一些本apk的特性以及新添加的功能。这种左右滑动的效果是可以通过android动画来实现,其实看起来觉得挺复杂的,其实点都不复杂。这里就简单地看看translate动画的应用,不说原理。

看代码,这里anim目录下有4个动画的配置文件,他们分别是:


push_left_in.xml——从左边滑入

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
	<translate 
		android:fromXDelta="-100%p" 
		android:toXDelta="0"
		android:duration="1000" />
</set>

push_right_out.xml——从右边滑出

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
	<translate 
	    android:fromXDelta="0" 
	    android:toXDelta="100%p"
		android:duration="1000" />
</set>


push_right_in.xml——从右边滑入

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
	<translate 
	    android:fromXDelta="100%" 
	    android:toXDelta="0"
		android:duration="1000" />
</set>

push_left_out.xml——从左边滑出

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
	<translate 
		android:fromXDelta="0" 
		android:toXDelta="-100%p"
		android:duration="1000" />
</set>
看到这几个配置文件的名字就知道他们的作用,这里push_left_in和push_right_out配对着使用,会有页面向右滑动的效果,push_right_in和push_left_out配合使用会有页面向左滑动的效果。

到此为止,也该介绍一下,Activity中实现播放动画的方法,那就是:public void overridePendingTransition (int enterAnim, int exitAnim),参数解释如下;

enterAnimA resource ID of the animation resource to use for the incoming activity. Use 0 for no animation.
    exitAnimA resource ID of the animation resource to use for the outgoing activity. Use 0 for no animation. 

由于我这里的android设备是机顶盒,用遥控器来控制,所有我就捕捉的向左向右事件,来响应向左向右滑动。
建立3个Activity:
Left_Right_ActivityActivity.java
package dxd.android.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;

public class Left_Right_ActivityActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){
			startActivity(new Intent(Left_Right_ActivityActivity.this ,Next_1_Activity.class));
			finish();
			overridePendingTransition(R.anim.push_right_in,R.anim.push_left_out);
		}
		return super.onKeyDown(keyCode, event);
	

Next_1_Activity.java
package dxd.android.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;

public class Next_1_Activity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.next1);
    }
    
    @Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if(keyCode == KeyEvent.KEYCODE_DPAD_LEFT){
			startActivity(new Intent(Next_1_Activity.this ,Left_Right_ActivityActivity.class));
			finish();
			overridePendingTransition(R.anim.push_left_in,R.anim.push_right_out);
		}
		if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){
			startActivity(new Intent(Next_1_Activity.this ,Next_2_Activity.class));
			finish();
			overridePendingTransition(R.anim.push_right_in,R.anim.push_left_out);
		}
		return super.onKeyDown(keyCode, event);
	}
}


Next_2_Activity.java

package dxd.android.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;

public class Next_2_Activity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.next2);
    }
    
    @Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if(keyCode == KeyEvent.KEYCODE_DPAD_LEFT){
			startActivity(new Intent(Next_2_Activity.this ,Next_1_Activity.class));
			finish();
			overridePendingTransition(R.anim.push_left_in,R.anim.push_right_out);
		}
		if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){
			//可扩展下一个activity
		}
		return super.onKeyDown(keyCode, event);
	}
}


至于activity的布局文件,想怎么写就怎么写。


如果希望activity的显示不留Title栏的话,这里可以在工程的配置文件中声明,如果是全部都不需要,那么application节点声明,如果只是单个activity的话,就在该activity中声明即可,内容为:android:theme="@android:style/Theme.NoTitleBar.Fullscreen"


总结:关键是动画的配置文件要写正确,android:fromXDelta和android:toXDelta 到底要填多少,需要仔细考虑。可以结合overridePendingTransition这个方法来考虑,先考虑第一个参数,即将进入的activity的坐标变化,再考虑即将出去的activity的坐标变化,个人觉得有了这个思路,就不容易搞混淆了。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值