android:animateLayoutChanges属性
Posted xiaoqiang_0719
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android:animateLayoutChanges属性相关的知识,希望对你有一定的参考价值。
一、android:animateLayoutChanges属性
在API 11之后,Android为了支持ViewGroup类控件,在添加和移除其中控件时自动添加动画,为我们提供了一个非常简单的属性:android:animateLayoutChanges=[true/false],所有派生自ViewGroup的控件都具有此属性,只要在XML中添加上这个属性,就能实现添加/删除其中控件时,带有默认动画了。我们来看下这次的效果图:
然后来看看具体代码是如何来做的:
1、main.xml布局代码
[html] view plain copy- <?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="match_parent"
- android:orientation="vertical">
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
- <Button
- android:id="@+id/add_btn"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="添加控件"/>
- <Button
- android:id="@+id/remove_btn"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="移除控件"/>
- </LinearLayout>
- <LinearLayout
- android:id="@+id/layoutTransitionGroup"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:animateLayoutChanges="true"
- android:orientation="vertical"/>
- </LinearLayout>
2、MyActivity代码
MyActivity的代码也很简单,就是在点击添加按钮时向其中动态添加一个btn,在点击删除按钮时,将其中第一个按钮给删除。[java] view plain copy
- public class MyActivity extends Activity implements View.OnClickListener
- private LinearLayout layoutTransitionGroup;
- private int i = 0;
- @Override
- public void onCreate(Bundle savedInstanceState)
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- layoutTransitionGroup = (LinearLayout) findViewById(R.id.layoutTransitionGroup);
- findViewById(R.id.add_btn).setOnClickListener(this);
- findViewById(R.id.remove_btn).setOnClickListener(this);
- private void addButtonView()
- i++;
- Button button = new Button(this);
- button.setText("button" + i);
- LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
- ViewGroup.LayoutParams.WRAP_CONTENT);
- button.setLayoutParams(params);
- layoutTransitionGroup.addView(button, 0);
- private void removeButtonView()
- if (i > 0)
- layoutTransitionGroup.removeViewAt(0);
- i--;
- @Override
- public void onClick(View v)
- if (v.getId() == R.id.add_btn)
- addButtonView();
- if (v.getId() == R.id.remove_btn)
- removeButtonView();
由上面的效果图可见,我们只需要在viewGroup的XML中添加一行代码android:animateLayoutChanges=[true]即可实现内部控件添加删除时都加上动画效果。
下面我们来做下对比,如果把上面LinearLayout中的android:animateLayoutChanges=[true]给去掉的效果是怎样的?大家来看下原始添加控件是怎样的,就知道默认动画效果是什么了。
在没加android:animateLayoutChanges=true时:
可见,在添加和删除控件时是没有任何动画的。经过对比就可知道,默认的进入动画就是向下部控件下移,然后新添控件透明度从0到1显示出来。默认的退出动画是控件透明度从1变到0消失,下部控件上移。
二、LayoutTransaction
1、概述
上面虽然在ViewGroup类控件XML中仅添加一行android:animateLayoutChanges=[true]即可实现内部控件添加删除时都加上动画效果。但却只能使用默认动画效果,而无法自定义动画。为了能让我们自定义动画,谷歌在API 11时,同时为我们引入了一个类LayoutTransaction。
要使用LayoutTransaction是非常容易的,只需要三步:
第一步:创建实例
- LayoutTransaction transitioner
以上是关于android:animateLayoutChanges属性的主要内容,如果未能解决你的问题,请参考以下文章