为ViewGroup 对象的布局更改添加动画效果 笔记

之前使用的ObjectAnimator或ValueAnimator都是对一个控件进行动画设置的,如果要为ViewGroup内部使用动画,我们可以借助LayoutTransition,它可以在ViewGroup添加或者删除,或者使用VISIBLE、INVISIBLE、或者GONE调用setVisibility()方法时,这些试图可能会经历出现和消失动画。

使用实例:

ini 复制代码
LayoutTransition layoutTransition = new LayoutTransition();
ObjectAnimator anmiator = ObjectAnimator.ofFLoat(null,"aplha",0f,1f);
layoutTransition.setAnimator(LayoutTransition.DISAPPEARING,animator);
viewGroup.setLayoutTransition(layoutTransition);

//APPEARING:元素在容器中出现时所定义的动画。 
//DISAPPEARING:元素在容器中消失时所定义的动画。 
//CHANGE_APPEARING:由于容器中要显现一个新的元素,其他需要变化的元素所应 用的动画。 
//CHANGE_DISAPPEARING:当容器中某个元素消失时,其他需要变化的元素所应用 的动画。

注意:

  1. 使用CHANGE_APPEARING或者CHANGE_DISAPPEARING必须使用PropertyValuesHolder所构造的动画才会有效果。使用ObjectAnimator构造的无效。
  2. 在构造PropertyValuesHolder动画时,"left"、"top"属性的变动必写,如果不需要变动,则写为 PropertyValuesHolder pvhLeft = PropertyValuesHolder.ofInt("left",0,0); PropertyValuesHolder pvhTop = PropertyValuesHolder.ofInt("top",0,0);
  3. 在构造PropertyValuesHolder动画时,使用ofInt或ofFloat,第一个和最后一个参数值必须相同,否则该动画会被放弃。 PropertyValuesHolder pvh = PropertyValuesHolder.ofFloat("scaleX",1f,0f,);将不会有效果,除非改成1f,0f,1f
  4. 在构造PropertyValuesHolder动画时,使用ofInt或ofFloat,所有参数相同,该动画会被放弃。

设置监听:

less 复制代码
layoutTransition.addTransitionListener(new LayoutTransition.TransitionListener(){
    @Override 
    public void startTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType) {
    
    }
    
    @Override 
    public void endTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType) {
 
    }
});

//transitionType 的取值对应为 APPEARING = 2、CHANGE_APPEARING = 0、 DISAPPEARING = 3、CHANGE_DISAPPEARING = 1。
//APPEARING 事件所对应的 View 是控件,而 CHANGE_APPEARING 事件所对应 的 View 是容器。在删除控件时,原理相同。

其他方法

java 复制代码
public void setDuration(long duration) //设置所有动画完成所需要的时长
public void setDuration(int transitionType, long duration) //针对单个 Type 设置动画时长
public void setInterpolator(int transitionType, TimeInterpolator interpolator) //  针对单个 Type 设置插值器
public void setStartDelay(int transitionType, long delay)//针对单个 Type 设置动画延
public void setStagger(int transitionType, long duration)//针对单个 Type 设置每个子 item 动画的时间间隔
相关推荐
吴声子夜歌5 小时前
RxJava——操作符详解(四)
android·echarts·rxjava
我是阿亮啊6 小时前
Android Handler 消息机制之 Looper 深度解析
android·loop·handler·looper
Mr YiRan6 小时前
Android 16KB 腾讯Mars XLog适配
android
2501_915921436 小时前
不用 Xcode 上架 iOS,拆分流程多工具协作完成 iOS 应用的发布准备与提交流程
android·macos·ios·小程序·uni-app·iphone·xcode
子木鑫6 小时前
[SUCTF2019 & GXYCTF2019] 文件上传绕过实战:图片马 + .user.ini / .htaccess 构造 PHP 后门
android·开发语言·安全·php
一起养小猫6 小时前
Flutter for OpenHarmony 实战:打造功能完整的记账助手应用
android·前端·flutter·游戏·harmonyos
_乐无6 小时前
Unity 发布 Android 安卓端所有文件可读写
android·unity·游戏引擎
User_芊芊君子7 小时前
【LeetCode原地复写零】:双指针+逆向填充,O(n)时间O(1)空间最优解!
android·linux·leetcode
2501_944448008 小时前
Flutter for OpenHarmony衣橱管家App实战:支持我们功能实现
android·javascript·flutter
2601_9498333918 小时前
flutter_for_openharmony口腔护理app实战+预约管理实现
android·javascript·flutter