布局改变时的过场动画
来源:互联网 发布:陕西广电网络总公司 编辑:程序博客网 时间:2024/05/22 12:45
开启ViewGroup默认的过场动画
<android.support.constraint.ConstraintLayout android:id="@+id/container" 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:animateLayoutChanges为true,即可在添加和移除子控件的时候有默认动画效果 android:animateLayoutChanges="true" >
自定义ViewGroup的过场动画
在布局的中每个对象在布局变换时都有5种状态:APPEARING:布局中出现一个视图DISAPPEARING:容器中消失一个视图CHANGING:布局改变导致某个视图随之改变,例如调整大小,但不包括添加和移除视图CHANGE_APPERAING:其他视图的出现导致某个视图改变CHANGE_DISAPPEARING:其他视图的消失导致某个视图改变
public class LayoutChangeAnimationActivity extends AppCompatActivity { @BindView(R.id.textView) TextView mTextView; @BindView(R.id.button2) Button mButton2; @BindView(R.id.container) ConstraintLayout mContainer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout_change_animation); ButterKnife.bind(this); //绑定新的过渡动画 LayoutTransition layoutTransition = new LayoutTransition(); mContainer.setLayoutTransition(layoutTransition); //自定义出场动画 ObjectAnimator rotation = ObjectAnimator.ofFloat(null, "rotation", 0f, -3600f) .setDuration(layoutTransition.getDuration(LayoutTransition.APPEARING)); layoutTransition.setAnimator(LayoutTransition.APPEARING,rotation); //自定义消失动画 ObjectAnimator dispear = ObjectAnimator.ofFloat(null, "translationX", 0f, 3600f,0f) .setDuration(layoutTransition.getDuration(LayoutTransition.DISAPPEARING)); layoutTransition.setAnimator(LayoutTransition.DISAPPEARING,dispear); //使用属性动画设置似乎并不生效 PropertyValuesHolder scale = PropertyValuesHolder.ofFloat("translationX", 0f,1000f,0f); PropertyValuesHolder alpha = PropertyValuesHolder.ofFloat("alpha", 1f, 0f,1f); ValueAnimator valueAnimator = ObjectAnimator.ofPropertyValuesHolder(scale, alpha) .setDuration(layoutTransition.getDuration(LayoutTransition.DISAPPEARING)); } boolean isAdd = true; @OnClick(R.id.button2) public void onClick() { if (isAdd) { mContainer.removeView(mTextView); } else { mContainer.addView(mTextView); } isAdd = !isAdd; }}
页面切换时的过渡动画
打开页面时的动画:
res/anim/act_open_enter<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:fromDegrees="90" android:toDegrees="0" android:pivotX="0%" android:pivotY="0%" android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" android:duration="500"/> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" android:duration="500"/></set>res/anim/act_open_exit<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:fromDegrees="-90" android:toDegrees="0" android:pivotX="0%" android:pivotY="0%" android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" android:duration="500"/> <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" android:duration="500"/></set>
Intent intent = new Intent(AchChangeAnimation1.this, AchChangeAnimation2.class); //在startAct后调用才能生效 startActivity(intent); overridePendingTransition(R.anim.act_open_enter,R.anim.act_open_exit);
退出当前页面时的动画
res/anim/act_close_enter<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:fromDegrees="-90" android:toDegrees="0" android:pivotX="0%p" android:pivotY="0%p" android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" android:duration="500"/> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" android:duration="500"/></set>
res/anim/act_close_exit<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:fromDegrees="-90" android:toDegrees="0" android:pivotX="0%p" android:pivotY="0%p" android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" android:duration="500"/> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:fillEnabled="true" android:fillBefore="true" android:fillAfter="true" android:duration="500"/></set>
finish(); //finish()后调用才能生效 overridePendingTransition(R.anim.act_close_enter,R.anim.act_close_exit);
每次都需要调用过于麻烦,可以在主题中定义
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <!--定义过场动画--> <item name="android:windowAnimationStyle">@style/ActAnimation</item> </style> <style name="ActAnimation" parent="@android:style/Animation.Activity"> <item name="android:activityOpenEnterAnimation">@anim/act_open_enter</item> <item name="android:activityOpenExitAnimation">@anim/act_open_exit</item> <item name="android:activityCloseEnterAnimation">@anim/act_close_enter</item> <item name="android:activityCloseExitAnimation">@anim/act_close_exit</item> </style></resources>
Fragment的过渡动画
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();//必须在add replace等方法前调用 fragmentTransaction.setCustomAnimations(R.anim.act_open_enter,R.anim.act_open_exit ,R.anim.act_close_enter,R.anim.act_close_exit);
阅读全文
0 0
- 布局改变时的过场动画
- activitiy切换的过场动画
- Activity过场动画的设置
- 安卓中一些界面过场动画的实现
- activity 过场动画
- iOS 自定义过场动画
- 自定义 Android 过场动画
- ios addSubView 过场动画
- ActivityOptions过场动画
- android布局改变动画
- 布局内容改变动画
- iOS平滑式特点的过场动画实现
- 布局配合动画的使用 动态改变布局的高度
- Android5.0Activity的转场动画、过渡动画、过场动画、跳转动画
- AndroidUI 布局动画-布局内容改变动画
- 给view添加过场动画
- 冰火围城过场动画
- iOS过场动画调研笔记
- 嵌入式C语言之---模块化编程
- Unity+Vuforia实现AR图片识别应用
- noip2017 复习计划
- The best front-end hacking cheatsheets — all in one place.
- 深度学习之损失函数与激活函数的选择
- 布局改变时的过场动画
- 线段树[模板]
- 【WebService】第四章、Axis1.4发布WebService
- java反射机制
- github使用注意点
- latex 字母,字符上面 画斜线
- #BZOJ3700#发展城市(O(1)LCA+分析讨论)
- 腾讯android电话面试一
- 深度学习中的注意力机制