Android 动画——Layout Animations布局动画
Layout Animations主要使用LayoutTransition为布局的容器设置动画,当容器中的视图层次发生变化时存在过渡的动画效果。
LayoutTransition
This class enables automatic animations on layout changes in ViewGroup objects. To enable transitions for a layout container, create a LayoutTransition object and set it on any ViewGroup by calling setLayoutTransition(LayoutTransition)
. This will cause default animations to run whenever items are added to or removed from that container. To specify custom animations, use the setAnimator() method.
对应理解:当在ViewGroup容器中视图层次放生改变时,LayoutTransition能够自动的设置过度的动画。在视图容器中为了能够转换,我们通过创建一个ViewGroup对象调用setLayoutTransition(LayoutTransition)
在ViewGroup设置这个过度动画。我们也可以在视图的添加和删除时通过setAnimator()来设置动画。
我们来看一下LayoutTransition的使用:
LayoutTransition transition = new LayoutTransition();//创建LayoutTransition的对象。 transition.setDuration(3000);//设置添加过度动画显示的时间。 transition.setAnimator(LayoutTransition.APPEARING, AnimatorInflater.loadAnimator(this, R.animator.animator));//添加动画 mGridLayout.setLayoutTransition(transition);//将LayoutTransition添加到ViewGroup容器中。
Layout Animations实例应用
我们在布局中添加一个按钮,通过点击按钮来实现在GridLayout布局中动画形式增加一个按钮,点击添加按钮,按钮会自动删除。
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.administrator.myanimation.LayoutAnimatorActivity"> <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="添加按钮"/> <GridLayout android:id="@+id/gridlayout" android:layout_width="match_parent" android:layout_height="match_parent" android:columnCount="5"></GridLayout></LinearLayout>
Activity:
public class LayoutAnimatorActivity extends Activity { private Button mButtonAdd; private GridLayout mGridLayout; private int count; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout_animator); mButtonAdd = (Button) findViewById(R.id.button); mGridLayout = (GridLayout) findViewById(R.id.gridlayout); //设置布局的动画 LayoutTransition transition = new LayoutTransition(); transition.setDuration(1000); transition.setAnimator(LayoutTransition.APPEARING, transition .getAnimator(LayoutTransition.APPEARING)); transition.setAnimator(LayoutTransition.CHANGE_APPEARING, transition.getAnimator(LayoutTransition.CHANGE_APPEARING)); transition.setAnimator(LayoutTransition.DISAPPEARING, transition.getAnimator(LayoutTransition.DISAPPEARING)); transition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING, transition.getAnimator(LayoutTransition.CHANGE_DISAPPEARING)); mGridLayout.setLayoutTransition(transition); mButtonAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { count++; final Button button = new Button(LayoutAnimatorActivity.this); ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); button.setLayoutParams(params); button.setText(""+count); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mGridLayout.removeView(v); } }); mGridLayout.addView(button); } }); }}
这里使用到了LayoutTransition的四种效果:
APPEARING:当一个View在ViewGroup中出现时,对此View设置的动画
CHANGE_APPEARING:当一个View在ViewGroup中出现时,对此View对其他View位置造成影响,对其他View设置的动画。
DISAPPEARING: 当一个View在ViewGroup中消失时,对此View设置的动画。
CHANGE_DISAPPEARING: 当一个View在ViewGroup中消失时,对此View对其他View位置造成影响,对其他View设置的动画。
CHANGE: 不是由于View出现或消失造成对其他View位置造成影响,然后对其他View设置的动画。
更多相关文章
- Android使用cocos2d做简单的平移动画
- 第八节(Activity布局初步一)
- Android状态栏上添加按钮
- Android DrawerLayout+ fragment 布局实现左右侧滑
- 可动态布局的Android抽屉之基础
- Android学习(一) 按钮的事件
- 在Unity中捕捉Android的常用按钮返回事件
- sencha touch中处理Android返回按钮事件