布局变化时的动画
2015-11-29 20:25
232 查看
应用程序动态地添加或移除布局中的视图。使用 LayoutTransition 对象自定义布局中对视图结构修改后的动画效果,需要在 XML 中设置 android:animateLayoutChanges 标识或者在 Java 代码中添加一个 LayoutTransition 对象,即可实现任何 ViewGroup 改变布局时的动画效果。效果如下:
应用程序可以为下面任何一种状态设置自定义动画:
APPEARING : 容器中出现一个视图。
DISAPPEARING : 容器中消失一个视图。
CHANGING : 布局改变导致某个视图随机改变,但不包括添加或者移除视图。
CHANGE_APPEARING : 其他视图的出现导致某个视图改变。
CHANGE_DISAPPEARING : 其他视图的消失导致某个视图改变。
content_main.xml : (AndroidStudio1.5)
MainActivity.java :
应用程序可以为下面任何一种状态设置自定义动画:
APPEARING : 容器中出现一个视图。
DISAPPEARING : 容器中消失一个视图。
CHANGING : 布局改变导致某个视图随机改变,但不包括添加或者移除视图。
CHANGE_APPEARING : 其他视图的出现导致某个视图改变。
CHANGE_DISAPPEARING : 其他视图的消失导致某个视图改变。
content_main.xml : (AndroidStudio1.5)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="vertical" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.crazy.bujudonghua.MainActivity" tools:showIn="@layout/activity_main"> <Button android:id="@+id/bt_add" android:onClick="onAddClick" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点击添加" /> <LinearLayout android:id="@+id/verticalContainer" android:animateLayoutChanges="true" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> </LinearLayout> </LinearLayout>
MainActivity.java :
package com.crazy.bujudonghua; import android.animation.Animator; import android.animation.LayoutTransition; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.Menu; import android.view.MenuItem; import android.view.ViewGroup; import android.view.animation.Animation; import android.widget.Button; import android.widget.LinearLayout; public class MainActivity extends AppCompatActivity { LinearLayout mContainer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); mContainer = (LinearLayout)findViewById(R.id.verticalContainer); LayoutTransition transition = new LayoutTransition(); mContainer.setLayoutTransition(transition); // 通过翻转进入的动画代替默认的出现动画 Animator appearAnim = ObjectAnimator.ofFloat(null, "rotationY", 90f, 0f).setDuration( transition.getDuration(LayoutTransition.APPEARING)); transition.setAnimator(LayoutTransition.APPEARING, appearAnim); // 通过翻转消失的动画代替默认的消失动画 Animator disappearAnim = ObjectAnimator.ofFloat(null, "rotationZ", 0f, 90f).setDuration( transition.getDuration(LayoutTransition.DISAPPEARING)); transition.setAnimator(LayoutTransition.DISAPPEARING, disappearAnim); // 通过滑动动画代替默认的布局改变时的动画 // 设置动画属性,所以创建多个 PropertyValuesHolder 对象的动画, // 这个动画会让视图滑动进入并短暂的缩小一半长度 PropertyValuesHolder pvhSlide = PropertyValuesHolder.ofFloat("y", 0, 1); PropertyValuesHolder pvhScaleY = PropertyValuesHolder.ofFloat("scaleY", 1f, 0.5f, 1f); PropertyValuesHolder pvhScaleX = PropertyValuesHolder.ofFloat("scaleX", 1f, 0.5f, 1f); Animator changingAppearingAnim = ObjectAnimator.ofPropertyValuesHolder( this, pvhSlide, pvhScaleY, pvhScaleX); changingAppearingAnim.setDuration( transition.getDuration( LayoutTransition.CHANGE_DISAPPEARING)); transition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING, changingAppearingAnim); } public void onAddClick(View v){ Button button = new Button(this); button.setText("点击删除"); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mContainer.removeView(v); } }); mContainer.addView(button, new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT , ViewGroup.LayoutParams.WRAP_CONTENT)); } }
相关文章推荐
- ACM组队安排(hdu校赛)
- ThinkPHP框架二 框架配置
- STM32 RTC 读写不正确
- Ceph分布式文件系统
- 俄罗斯和土耳其
- junit.framework.AssertionFailedError: No tests found in JUnit.test at junit junit.framework.Asserti
- [LeetCode][JavaScript]Minimum Height Trees
- Android Glide源码解析
- 信息安全系统设计基础第十二周总结
- CodeForces 498A-Crazy Town-简单计算几何
- hpuoj--校赛--送给新生的礼物(水题)
- 【Educational Codeforces Round 2B】【map or 二分查找】Queries about less or equal elements b[]中的每个数比a[]中多少数大
- 新手学EasyUI(八)----SubGrid三级嵌套
- 杭电oj 1009
- 二级菜单的使用
- 逆袭指数(hdu校赛)
- hpuoj--校赛--送给新生的礼物(水题)
- HTML基础-超链接
- 学一个人要尊重她的事业,她的朋友,她的一切。
- 100 Same Tree