LayoutAnimation介绍和使用
布局动画是一种可以应用于整个ViewGroup的动画效果,它能够在添加、删除或重新排列子View时,为每个子View设置一个统一的动画。布局动画可以通过XML文件或者Java代码来定义,并在ViewGroup中使用。
1. LayoutAnimation的实现
布局动画主要通过以下几部分实现:
- Animation:定义具体的动画效果,如透明度变化、旋转、缩放、位移等。
- LayoutAnimationController:控制动画的播放顺序和时间间隔。
- AnimationSet:如果需要组合多种动画效果,可以使用AnimationSet。
1. 使用XML定义LayoutAnimation
在res/anim目录下创建一个XML文件,例如layout_animation.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:delay="0.5"
android:animationOrder="normal"
android:animation="@anim/item_animation" />
其中@anim/item_animation是指向具体动画效果的XML文件,例如:
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="-100%"
android:toXDelta="0%"
android:duration="300" />
在布局文件中使用该布局动画:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layoutAnimation="@anim/layout_animation">
<!-- 子View定义 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Item 1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Item 2" />
</LinearLayout>
2. 使用Java代码定义LayoutAnimation
在Java代码中创建和使用LayoutAnimation:
// 创建动画效果
Animation itemAnimation = AnimationUtils.loadAnimation(this, R.anim.item_animation);
// 创建LayoutAnimationController
LayoutAnimationController controller = new LayoutAnimationController(itemAnimation);
controller.setDelay(0.5f);
controller.setOrder(LayoutAnimationController.ORDER_NORMAL);
// 将LayoutAnimationController设置到ViewGroup
LinearLayout linearLayout = findViewById(R.id.linearLayout);
linearLayout.setLayoutAnimation(controller);
2. 常用属性
android:delay:每个子View动画开始的延迟时间,以动画持续时间的百分比表示。android:animationOrder:动画顺序,可以是normal(按添加顺序)、reverse(按相反顺序)或random(随机顺序)。android:animation:具体动画效果的引用。
2. Activity的切换效果
在Android开发中,自定义Activity切换效果可以提升用户体验,使应用在页面切换时更加生动和自然。实现自定义的Activity切换效果主要有两种方式:
- 使用Android提供的过渡动画资源。
- 自定义过渡动画资源。
1. 使用Android提供的过渡动画资源
Android SDK 提供了一些预定义的过渡动画资源,可以直接使用来实现Activity的切换效果。
1. 使用预定义动画
Android提供了一些标准的过渡动画,例如从左到右滑入、从右到左滑出等。你可以在res/anim目录下创建过渡动画资源文件,或者使用Android系统自带的动画资源。
2. 使用系统提供的过渡动画
在Activity切换时,可以通过overridePendingTransition方法来设置过渡动画。例如:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 启动另一个Activity
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
// 设置过渡动画
overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
}
3. 系统提供的常用动画资源
android.R.anim.fade_in:淡入效果android.R.anim.fade_out:淡出效果android.R.anim.slide_in_left:从左侧滑入android.R.anim.slide_out_right:从右侧滑出
2. 自定义过渡动画资源
如果系统提供的过渡动画不能满足需求,可以通过自定义动画资源来实现更复杂的效果。
1. 创建自定义动画资源
在res/anim目录下创建自定义动画资源文件。例如,创建slide_in_right.xml和slide_out_left.xml:
slide_in_right.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="300"/>
</set>
slide_out_left.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%"
android:duration="300"/>
</set>
2. 在Activity中使用自定义动画
在Activity启动和结束时使用自定义的过渡动画:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 启动另一个Activity
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
// 设置自定义过渡动画
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
}
在SecondActivity中,同样设置返回时的过渡动画:
@Override
public void finish() {
super.finish();
// 设置返回时的过渡动画
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
}
3. 处理返回键
在处理返回键时,也可以设置过渡动画:
@Override
public void onBackPressed() {
super.onBackPressed();
// 设置返回时的过渡动画
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
}