首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

android objectanimator从上到下展开/折叠动画?

基础概念

ObjectAnimator 是 Android 平台中用于创建属性动画的类。它允许你通过改变对象的属性值来创建动画效果。ObjectAnimator 可以用于实现各种复杂的动画效果,包括从上到下展开/折叠动画。

相关优势

  1. 灵活性ObjectAnimator 允许你自定义动画的属性和值,可以实现各种复杂的动画效果。
  2. 性能ObjectAnimator 使用硬件加速,动画效果流畅且性能较好。
  3. 易用性ObjectAnimator 提供了简洁的 API,易于使用和集成。

类型

ObjectAnimator 主要有以下几种类型:

  1. ValueAnimator:用于创建基于值的动画。
  2. ObjectAnimator:用于创建基于对象属性的动画。
  3. AnimatorSet:用于组合多个动画。

应用场景

ObjectAnimator 可以应用于各种需要动画效果的场景,例如:

  • UI 组件的展开/折叠动画。
  • 图片的淡入淡出效果。
  • 文本的滚动动画。

实现从上到下展开/折叠动画

以下是一个使用 ObjectAnimator 实现从上到下展开/折叠动画的示例代码:

代码语言:txt
复制
import android.animation.ObjectAnimator;
import android.view.View;
import android.view.ViewGroup;

public class AnimationUtils {

    public static void expandView(final View view) {
        view.measure(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        final int targetHeight = view.getMeasuredHeight();

        view.getLayoutParams().height = 0;
        view.setVisibility(View.VISIBLE);

        ObjectAnimator animator = ObjectAnimator.ofInt(view, "layoutHeight", 0, targetHeight);
        animator.setDuration(500);
        animator.start();
    }

    public static void collapseView(final View view) {
        final int initialHeight = view.getMeasuredHeight();

        ObjectAnimator animator = ObjectAnimator.ofInt(view, "layoutHeight", initialHeight, 0);
        animator.setDuration(500);
        animator.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
                view.setVisibility(View.GONE);
            }
        });
        animator.start();
    }
}

解决常见问题

  1. 动画不流畅
    • 确保动画的持续时间设置合理。
    • 使用硬件加速,确保在 AndroidManifest.xml 中设置了 android:hardwareAccelerated="true"
  • 动画结束后视图状态不正确
    • 使用 AnimatorListenerAdapter 监听动画结束事件,并在动画结束后调整视图状态。
  • 动画效果不符合预期
    • 检查动画的属性和值设置是否正确。
    • 确保视图已经测量并布局完成后再进行动画操作。

参考链接

通过以上内容,你应该能够理解 ObjectAnimator 的基础概念、相关优势、类型、应用场景,并能够实现从上到下展开/折叠动画。如果遇到问题,可以根据常见问题解决方案进行排查和调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

折叠卡片展开收回动画优化

在现代网页开发中,用户体验的重要性不断提升,尤其是在涉及动态内容展示时,动画的流畅性成为关键。为了提高展开和收回动画的平滑度,避免卡顿,开发者通常面临的问题是如何处理动画过程中高度的变化。...解决方案:实现动态高度的过渡动画为了改进过渡动画的流畅性,我们需要确保动画的高度变化基于内容的实际高度,而不是预设的最大高度。...expand-enter-active, .expand-leave-active { transition: none;}关键解释过渡钩子函数:beforeEnter: 进入前,将元素的 height 设为 0,透明度设为 0,准备展开...这不仅让动画显得更加平滑,也提高了复杂内容展示时的性能。总结通过这些优化,展开和收回动画的流畅度得到了显著提升。...相比使用固定 max-height 的方案,动态获取内容高度的方式能确保动画无缝、自然过渡,避免了因高度变化不精准而导致的动画卡顿问题。这种技术尤其适用于动态内容较多的页面,能够显著提升用户体验。

12910
  • Android动画-Property Animation

    相关的类 ObjectAnimator 动画的执行类,后面详细介绍 ValueAnimator 动画的执行类,后面详细介绍 AnimatorSet 用于控制一组动画的执行:线性,一起,每个动画的先后执行等...ObjectAnimator实现动画 之所以选择ObjectAnimator为第一个是因为,这个实现最简单一行代码,秒秒钟实现动画,下面看个例子: 我们想实现ListView的item的折叠展开 如上所示 我们外层LinearLayout的高度为60dp,里面也有两个都是60dp,这样我们动态改变外层的高度来实现展开折叠动画 先说个简单的翻转动画 file_list_item...ObjectAnimator强大,但是会相对自由,他只会改变值,而我们可以设置View的属性值来实现动画 public void rotateyAnimRun(final View view) {...可以设置动画同时执行或先后执行 public void togetherRun(View view){ ObjectAnimator anim1 = ObjectAnimator.ofFloat

    38810

    Android开发实现的文本折叠点击展开功能示例

    本文实例讲述了Android开发实现的文本折叠点击展开功能。分享给大家供大家参考,具体如下: 信息栏,景点介绍,购物信息,进场会使用到文本折叠的方法 实现非常简单,这里就不哆嗦了 效果如下: ?...Demo:https://github.com/LonglyWolf/NavigationSystemHLJU 这里用到了三方类库,在app/gradle添加依赖如下: //文本过长 点击展开全部 implementation...'com.ms-square:expandableTextView:0.1.4' 上面的实例是通过adapter就和listView实现的,这里就不搞那么复杂,直接看折叠文本的方法实现: 首先是主活动...<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com...:android="http://schemas.android.com/apk/res/android" xmlns:expandableTextView="http://schemas.android.com

    3.4K30

    Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法

    大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了。...阅读本篇文章需要你对属性动画有一定的了解,并且掌握属性动画的基本用法,如果你还对属性动画不够了解的话,建议先去阅读 Android属性动画完全解析(上),初识属性动画的基本用法 。...下面我们只需要在布局文件当中引入这个自定义控件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"...OK,位置动画和颜色动画非常融洽的结合到一起了,看上去效果还是相当不错的,这样我们就把ObjectAnimator的高级用法也掌握了。...好的,通过本篇文章的学习,我们对属性动画已经有了颇为深刻的认识,那么本篇文章的内容到此为止,下篇文章当中将会介绍更多关于属性动画的其它技巧,感兴趣的朋友请继续阅读 Android属性动画完全解析(下),

    82590

    Android 属性动画框架 ObjectAnimator、ValueAnimator ,这一篇就够了

    前言 我们都知道 Android 自带了 Roate Scale Translate Alpha 多种框架动画,我们可以通过她们实现丰富的动画效果,但是这些宽家动画却有一个致命的弱点,它们只是改变了 View...这时以 ObjectAnimator、ValueAnimator 为代表的属性动画也就应运而生了。...---- 使用 ObjectAnimator 实现四种动画 这里我打算通过使用 ObjectAnimator 实现四大动画框架: alpha scaleX/scaleY translateX/translateY...ViewGroup 增加活减少控件是的动画,是的界面的变换不是那么的突兀,其实细心的同学可能有发现,android 是自带切换效果的,但是形式比较单一,所以这里我通过自定义 ObjectAnimator...ObjectAnimator 对象 然后 在 ObjectAnimator.ofPropertyValuesHolder() 中设置一系列的动画效果 用 setAnimation 方法将该 ObjectAnimator

    2.7K30

    Android开发笔记(一百)折叠式列表

    点击展开动态全文时,就得显示所有行的文本,整个文本的高度是getLineHeight*getLineCount。现在有了每条动态的初始高度,以及动态全文的完整高度,再加个拉伸动画就差不多了。...FoldingLayout ExpandableListView对于一般场景的折叠式列表已经够用了,可是它的UI风格略显呆板,如果我们想来个显示特效,比如加上折叠展开动画,那最好还是自己写个折叠式列表控件...FoldingLayout便是这样一个开源的折叠式布局控件,它实现了像折纸那样折叠展开折叠收起的动画。...下面是FoldingLayout的常用方法说明: setFoldFactor : 设置折叠的因子。0表示收起,1表示展开。 setOrientation : 设置折叠的方向。...com.example.exmfoldlist.view.FoldingLayout; import com.example.exmfoldlist.view.OnFoldListener; import android.animation.ObjectAnimator

    2.2K40

    【翻译】MotionLayout实现折叠工具栏(Part 1)

    本系列教程中,我会讲解如何使用 MotionLayout 来创建一个我们已经非常熟悉的动画行为:一个折叠工具栏动画( a Collapsing Toolbar )。...举个例子,一个折叠工具栏应该根据用户的滚动进行展开折叠,所以实际动画的运行应该时刻跟随用户的拖拽进行。这也是那些框架办不到的地方。 废话不多说,让我们看下我们所要尝试模拟做到的行为动作。.../> 两个属性: app:constraintSetStart 和 app:constraintSetEnd 分别指 ConstrainSet 所定义的两种状态:展开状态和折叠状态...在展开折叠状态下, RecyclerView 列表的上边缘是处于不同位置的,因为它被约束到了 ID 为 toolbar_image 的 ImageView 图片下边缘,而这个过渡动画的实现正是由于控制着这个位置变量的值...在折叠状态下它会垂直居中,而在展开状态下它会对齐在底部,因此 TextView 会更多的相对于 ImageView 的大小尺寸来进行相关设定。

    1.9K31

    Android魔术系列:一步步实现淹没、展开效果

    前言 本篇文章我们实现一个简单的动画效果,目的是熟悉和加深Android属性动画的使用。...动画分析 这个效果一共有三个状态: (状态1) (状态2) (状态3) 整个效果包含两个阶段: 淹没 —— 从状态1到状态2。整个粉红色的区域向上淹没整个页面 展开 —— 从状态2到状态3。...当淹没整个页面后,从中间展开直至整个页面 整体布局 这两个阶段就是实际上就是通过两部分动画的依次执行来实现的,我们先来看看布局: <?...回到代码本身,我们通过上面的分析知道整个过程由两部分动画组成:淹没和展开。...在floodAnimation完成时我们执行了另外一个动画,这就是第二个阶段:展开

    59220

    【Flutter】Android、Flutter 折叠屏适配 ( 展开大屏 | 折叠主屏 | 折叠副屏 | 静态展示 | 动态热切换适配 | 拉伸布局 | X 轴自适应适配 | 布局重构 )

    文章目录 一、Android、Flutter 折叠屏适配 二、展开大屏适配 三、折叠主屏适配 四、折叠副屏适配 五、折叠屏动态热切换适配 五、拉伸布局 六、X 轴自适应适配 七、布局重构 八、Android...、Flutter 中的程序配置 1、屏幕自适应配置 2、设置切换屏蔽宽高比不重启适配 3、设置最大最小屏幕比例 一、Android、Flutter 折叠屏适配 ---- 华为的 Mate X 折叠屏有...3 种形态 : 展开形态 ( 大屏 ) : 屏幕宽高比 8:7.1 , 近似于正方形 ; 分辨率为 2480 \times 2200 ; 折叠形态 ( 主屏 ) : 屏幕宽高比 19.5...2480 \times 892 ; 二、展开大屏适配 ---- 屏幕展开后 , 处于屏幕宽高比 8:7.1 状态下 , 屏幕要完全填充整个屏幕 , 如下图的 A 的样式 ; B 中左右出现的黑边..., 就需要自动切换屏幕样式 ; 如 : 当前是 折叠状态主屏 打开应用 ( 此时宽高比 19.5:9 ) , 突然将手机打开开 , 变为 展开状态大屏 ( 此时宽高比 8:7.1 ) , 官方要求应用的布局要实时切换成

    5.8K10
    领券