您的位置:首页 > 移动开发 > Android开发

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

2013-07-24 14:11 477 查看
在安装完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的坐标变化,个人觉得有了这个思路,就不容易搞混淆了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: