android Auto animate layout updates

整体流程、Measure、Layout 详解——RecyclerView源码详解(一) 前言 整体流程、measure、layout 详解 ——深入分析RecyclerView源码(一) 缓存 ——深入分析RecyclerView源码(二) 滑动和动画 ——深入分析RecyclerView源码(二) 本篇文章分析主体流程,先来整体看一下RecycleView的 结构 图片来自 RecycleView 是一个ViewGroup,想要显示数据集Datas,需要通过适配器Adapter,把数据转为对应的View,这样就可以添加到RecycleView中了。(适配器模式) 由于屏幕能显示View 阅读详情

准备花一段时间把Android官方文档翻译下, 系统的学习下,今天学习layout布局文件自动添加动画

https://developer.android.google.cn/training/animation/layout

先来个官网介绍

Android offers pre-loaded animation that the system runs each time you make a change to the layout. All you need to do is set an attribute in the layout to tell the Android system to animate these layout changes, and system-default animations are carried out for you

Android提供了预加载的动画,每当您更改布局时,系统都会运行该动画。 您需要做的就是在布局中设置一个属性,以告知Android系统为这些布局更改设置动画,然后为您执行系统默认的动画

提示:如果要提供自定义布局动画,请创建LayoutTransition对象,然后使用setLayoutTransition()方法将其提供给布局

使用

In your activity's layout XML file, set the android:animateLayoutChanges attribute to true for the layout that you want to enable animations for. For instance:

在您活动的布局XML文件中,将您要为其启用动画的布局的android:animateLayoutChanges属性设置为true。 例如:

<LinearLayout android:id="@+id/container"
    android:animateLayoutChanges="true"
    ...
/>

Add, update, or remove items from the layout

private ViewGroup containerView;
...
private void addItem() {
    View newView;
    ...
    containerView.addView(newView, 0);
}

上面全是官网的 现在写demo来看下怎么使用

布局文件:

<?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:id="@+id/activity_main_ll_root"
            android:layout_width="match_parent"
             android:layout_height="wrap_content"
              android:orientation="vertical"

                >
        <TextView
                android:id="@+id/activity_main_tv_text1"
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:text="张三"
                android:gravity="center"
                android:background="#fff"
             />
        <TextView
                android:id="@+id/activity_main_tv_text2"
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:text="李四"
                android:gravity="center"
                android:background="#fff"
                android:visibility="gone"
        />
        <TextView
                android:id="@+id/activity_main_tv_text3"
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:text="王五"
                android:gravity="center"
                android:background="#fff"

        />
    </LinearLayout>
    <Button
            android:id="@+id/activity_main_btn_chang"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="更新内容"
            android:layout_marginTop="50dp"
    />
</LinearLayout>

代码

package com.rxjava.autoanimateactivity;
import android.animation.LayoutTransition;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private LinearLayout llRoot;
    private TextView tvText3;
    private TextView tvText2;
    private TextView tvText1;
    private Button btnChang;
    private int index = 0;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        llRoot = findViewById(R.id.activity_main_ll_root);
        tvText3= findViewById(R.id.activity_main_tv_text3);
        tvText2= findViewById(R.id.activity_main_tv_text2);
        tvText1= findViewById(R.id.activity_main_tv_text1);
        btnChang = findViewById(R.id.activity_main_btn_chang);
        LayoutTransition layoutTransition = new LayoutTransition();

        layoutTransition.setDuration(200);
        llRoot.setLayoutTransition(layoutTransition);

        btnChang.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(tvText2.getVisibility()==View.VISIBLE){
                    tvText2.setVisibility(View.GONE);
                }else{
                    tvText2.setVisibility(View.VISIBLE);
                }
            }
        });
    }
}

效果

这个效果不明细 给textview加个背景

现在实现下点击一步步隐藏三个textview效果

btnChang.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                 if(index==0){
                    index++;
                    llRoot.removeView(tvText3);
                }else if(index==1){
                    index++;
                    llRoot.removeView(tvText2);
                }else if(index==2){
                    index++;
                    llRoot.removeView(tvText1);
                }else if(index==3){
                     index++;
                     llRoot.addView(tvText1);
                 }else if(index==4){
                     index++;
                     llRoot.addView(tvText2);
                 }else if(index==5){
                     index++;
                     llRoot.addView(tvText3);
                 }
            }
        });

效果:

这个场景在很多地方都会用到,比如曹操或者滴滴打车就有类似的效果

比如点击现在就没有选择用车时间 这个view 如果是使用view的setVisibility来控制它显示和隐藏, 效果看起来就很硬生生的,这个时候就可以使用上面讲的LayoutTransition

使用LayoutTransition 可以在布局文件中添加属性android:animateLayoutChanges="true",当然也可以使用它提供的类

是用类更好 可以设置动画的时间等其他。

比如还有就是在某个场景下容器view添加一个item view 会有这种效果,

博客《Animation动画详解(十二)——animateLayoutChanges与LayoutTransition》对应源码 博客《Animation动画详解(十二)——animateLayoutChanges与LayoutTransition》所对应源码,博客地址:http://blog.youkuaiyun.com/harvic880925/article/details/50985596 立即下载

相关推荐

【ISP图像处理】Demosaic去马赛克技术演进与边缘优化策略

本文深入解析了ISP图像处理中的Demosaic(去马赛克)技术。从Bayer阵列原理出发,梳理了从双线性插值、Hamilton-Adams边缘导向算法到利用通道相关性与自相似性的技术演进历程,并重点探讨了针对边缘与纹理伪影的优化策略,为工程实践中的算法选型与硬件协同设计提供了专业指导。

weixin_29091445的博客 387

自定义控件三部曲之动画篇(十二)——animateLayoutChanges与LayoutTransition

前言:生活不只眼前的苟且,还有诗和远方的田野 相关文章: 《Android自定义控件三部曲文章索引》:http://blog.youkuaiyun.com/harvic880925/article/details/50995268 前篇给大家讲了LayoutAnimation的知识,LayoutAnimation虽能实现ViewGroup的进入动画,但只能在创建时有效。在创建后,再往里...

启舰 2万+

ADB命令解锁Android手机屏幕的3种实用方法(附详细步骤)

本文详细介绍了在Android手机屏幕失灵或密码遗忘时,利用ADB命令解锁屏幕的三种实用方法。包括通过ADB模拟输入事件、移除锁屏认证文件(需Root权限)以及结合恢复模式抢救数据。文章提供了详细的操作步骤与风险提示,强调提前开启USB调试的重要性,是Android用户应对紧急锁屏情况的有效技术指南。

weixin_29229055的博客 918

Auto-Animate:是一款零配置、即插即用的动画工具,可以为您的 Web 应用添加流畅的过渡效果

Auto-Animate是一款零配置、即插即用的动画工具,由FormKit团队开发。它支持React、Vue以及其他JavaScript应用程序,无需复杂的设置,即可让你的web应用拥有平滑的动画效果。Auto-Animate凭借其简单易用、无需配置的特点,成为了web应用动画效果实现的好帮手。无论是提升用户体验还是增加产品的趣味性,Auto-Animate都能助你一臂之力。如果你正在寻找一款轻量级的动画工具,那么Auto-Animate绝对值得一试。

1965

喷雾破碎模型解析:从理论到CFD应用实践

本文深入解析喷雾破碎模型的理论基础与CFD应用实践,重点介绍KHRT、TAB和ETAB等主流模型的核心原理与工程调参技巧。通过OpenFOAM实例演示和参数优化建议,帮助工程师精准预测液滴破碎行为,提升燃烧效率与排放控制性能,适用于汽车发动机、燃气轮机等工业场景。

weixin_29281915的博客 498

STM32实战指南:TFTLCD液晶屏驱动与ILI9341应用解析

本文详细解析了STM32驱动TFTLCD液晶屏的实战技巧,重点介绍了ILI9341控制器的硬件连接、寄存器操作及性能优化方法。通过8080并行接口时序分析、GRAM操作优化和DMA传输应用,帮助开发者高效实现液晶屏驱动,适用于工业控制、智能家居等场景。

weixin_26873711的博客 232

AutoAnimate - 无需任何配置,一行代码自动为元素添加优雅的过渡动画,可以搭配 Vue / React 和 Sevelt 使用

这个动画库只要一行代码就可以自动在我们的组件中添过渡动画,为什么这么省事高效呢?AutoAnimate 是一个无需任何配置,自动为我们开发的项目添加平滑过渡动画的 JavaScript 工具库。

那些免费的砖 522

EDK2多平台编译实战:从树莓派到RK3399的UEFI固件构建

本文提供了从树莓派到RK3399的EDK2多平台编译实战指南。详细介绍了UEFI固件构建的环境搭建、交叉编译配置、平台描述文件修改及常见问题排查,帮助开发者掌握为不同ARM架构硬件构建标准化启动固件的核心技能。

weixin_29193259的博客 836

AutoAnimate动画库,仅需一行代码

插件官网,支持react,vue。

大赚万万亿 197

Android Camera驱动开发工程师面试指南:技术深度与实战准备

摘要:上海移远通信招聘Android Camera驱动开发工程师,主要负责Camera传感器驱动开发维护、高通/展锐平台底层开发及技术预研。岗位要求1年以上嵌入式开发经验,精通Camera传感器驱动调试,熟悉高通平台Camera架构及Android HAL框架。具备HAL开发、算法集成或车载/支付行业经验者优先。工作内容以Driver/HAL开发为主,需具备硬件接口评估能力。该职位接受Linux/单片机背景人员转型。

郑伟强dev的专栏 280

5、高级综合技术:从调度到优化的全面解析

本文深入解析了高级综合技术,涵盖从控制/数据流图构建、调度算法、分配绑定策略到编译器优化的全流程。通过案例分析和对比,探讨了不同优化策略对性能和资源利用的影响,并总结了关键要点及未来发展趋势,为高效利用FPGA实现数字设计提供了全面指导。

night的博客 117

自定义控件动画篇(八)animateLayoutChanges与LayoutTransition的使用

为了使用自定义动画,你需要创建实现Animator接口的类。例如,一个简单的淡入动画可以这样实现:Java// 开始时透明// 动画到完全不透明6 }7}类似地,你可以为其他动画类型创建相应的实现类。通过上述方法,你可以利用和来增强用户界面的视觉效果,使布局变化更加平滑和吸引人。

VitorLiu的博客 1231

PCIe 6.0 – 关于 PCI Express Gen6 您需要知道的一切

幸运的是,PCIe 6.0 FEC 足够轻,对延迟的影响最小。在电气层上,PCIe 6.0 使用 PAM4 信号(“四级脉冲幅度调制”),每个时钟周期将 2 位组合为 4 个幅度级别(00、01、10、11),与 PCIe 5.0 和前几代相比,它使用 NRZ 调制,每个时钟周期 1 位和两个幅度级别 (0, 1)。虽然 PAM4 信号更容易出错,但由于调制技术的性质,与 PCIe 5.0 相比,通道损耗不受影响,因此 PCB 上 PCIe 6.0 信号的范围将与 PCIe 5.0 相同。

qq_43416206的博客 3429

AutoLayout的使用及介绍

为什么会出现AutoresizingMask和AutoLayout? 1. 适配:适应、兼容各种不同的情况    系统适配:新的方法、旧的方法废弃   屏幕适配:针对不同大小屏幕尺寸进行适配 1> 点、像素的关系 在用户眼中 屏幕是由无数个像素组成的 像素越多,屏幕越清晰 在开发者眼中 屏幕是由无数个点组成的,点又是由像

hufeill的专栏 340

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

前端工程师的实战跃迁:从问题域切入的性能与工程效能精进指南

现代前端开发已超越基础语法掌握,进入以浏览器渲染流水线、状态流治理、构建链路可控性为核心的高阶实践阶段。理解重排重绘的本质差异、合理运用contain与will-change等CSS性能隔离机制、精准归因React组件过度rerender,是保障Web应用核心用户体验(LCP/CLS)的关键技术能力。同时,Vite/Webpack构建产物的深度解剖、模块联邦的依赖协同、环境变量的安全注入,共同构成工程效能可度量、可优化、可归因的技术基座。本文聚焦中级向高级前端工程师在真实项目中高频遭遇的性能瓶颈与工程困境,

lanmh的专栏 400

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

AutoAnimate:一行代码为Web应用添加流畅动画效果

AutoAnimate:一行代码为Web应用添加流畅动画效果 【免费下载链接】auto-animate A zero-config, drop-in animation utility that adds smooth transitions to your web app. You can use it with Re...

gitblog_00086的博客 536

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

AutoAnimate,一款零配置的 JavaScript 过渡动画库

AutoAnimate 是一个零配置的嵌入式动画库,可添加平滑的过渡。您可以将它与 React、Solid、Vue、Svelte 或任何其他 JavaScript 应用程序一起使用。

繁华落尽 410

AutoAnimate: 一键赋予网页动态之美

AutoAnimate: 一键赋予网页动态之美 【免费下载链接】auto-animate A zero-config, drop-in animation utility that adds smooth transitions to your web app. You can use it with React, Vu...

gitblog_00147的博客 912

Android学习之界面篇(五)animateLayoutChanges

在API 11之后,Android为了支持ViewGroup类控件,在添加和移除其中控件时自动添加动画,为我们提供了一个非常简单的属性:android:animateLayoutChanges=[true/false],所有派生自ViewGroup的控件都具有此属性,只要在XML中添加上这个属性,就能实现添加/删除其中控件时,带有默认动画了。 效果如下所示:

wangxin1248的博客 2339

深入理解AutoAnimate:零配置动画的终极实现原理

想要为你的Web应用添加丝滑动画效果,却不想陷入复杂的配置和繁琐的代码编写?🤔 **AutoAnimate** 正是为这个痛点而生的零配置动画工具库。通过一行代码,就能让React、Vue、Solid等框架的应用界面动起来,大幅提升用户体验!✨ ## 什么是AutoAnimate? **AutoAnimate** 是一个零配置、即插即用的动画工具,专门为现代Web应用设计。它能够自动检测DO

gitblog_00085的博客 382

安卓最简单的动画效果实现-使用属性android:animateLayoutChanges="true"

在LinearLayout中添加属性android:animateLayoutChanges=“true”,包含在LinearLayout布局下面的ImageButton在显示和隐藏的时候,当LinearLayout布局下的控件有了变化或者位置上的移动时,就有一个迁移的动画效果了。 去掉android:animateLayoutChanges属性或者设置为false,则无动画效果,ImageBut...

Sunxiaolin2016的博客 1285

自动过渡动画 - AutoAnimate 库

AutoAnimate是一个零配置、投入式动画实用程序,可以为您的Web应用程序添加平滑的过渡。

我码玄黄的博客 866

AutoAnimate视觉测试终极指南:如何自动化验证动画效果的完整流程

AutoAnimate是一款零配置的动画工具,能够为Web应用添加平滑过渡效果,支持React、Vue等多种JavaScript框架。本文将详细介绍如何使用AutoAnimate进行视觉测试,确保动画效果符合预期。 ## 为什么需要视觉测试动画效果? 动画效果是提升用户体验的重要因素,但手动测试动画效果既耗时又容易出错。AutoAnimate提供了完善的视觉测试方案,通过自动化测试可以: -

gitblog_00022的博客 511

Android布局动画之animateLayoutChanges与LayoutTransition

Android的布局动画 你所应该了解的一切   关于布局动画是针对ViewGroup而言的,意指ViewGroup在增加子View或者删除子View时其子View的过渡动画,在android官网有这么一个简单的例子,其效果如下,接下来我们就通过这个例子来入门 ![](http://img.blog.youkuaiyun.com/20160916212650776 ) 最简单的布局动画实现

zejian的博客 3万+

Android多媒体与图形处理技术

Android多媒体与图形处理技术 本文全面介绍了Android平台的多媒体与图形处理核心技术,涵盖音频播放控制与焦点管理、相机拍照与视频录制功能实现、Bitmap高效加载与内存优化以及OpenGL ES图形渲染与3D效果四大核心模块。文章详细解析了Android音频焦点机制的工作原理和实现方式,相机功能的完整开发流程,Bitmap内存管理的最佳实践,以及OpenGL ES在移动设备上的3D图形渲...

gitblog_00978的博客 437

AutoAnimate:一行代码为你的应用增添动感

AutoAnimate:一行代码为你的应用增添动感 【免费下载链接】auto-animate A zero-config, drop-in animation utility that adds smooth transitions to your web app. You can use it with React, ...

gitblog_00041的博客 553
上一篇: Kotlin入门简介
下一篇: kotlin Control Flow
zhoushenxian
博客等级 码龄12年 453粉丝 549原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值