Android用动画显示或隐藏视图

作者:最萌小熊猫 时间:2023-08-05 20:07:25 

一、需求背景

有时候,我们需要在屏幕上显示新的信息,同时移除旧的信息,一般情况下我们通过VISIBILITY或者GONE来对需要显示或者隐藏的视图进行设置,这样做的坏处是显示或者隐藏的动作变化非常突兀,而且有时候变化很快导致用户无法注意到这些变化。这时就可以使用动画显示或者隐藏视图,通常情况下使用圆形揭露动画,淡入淡出动画或者卡片反转动画。

二、创建淡入淡出动画

淡入淡出动画会逐渐淡出一个View或者ViewGroup,同时淡入另一个。此动画适合在应用中切换内容或者视图的情况。这里使用ViewPropertyAnimator来创建这种动画。

下面的动画是从进度指示器切换到某些内容文字的淡入淡出示例。

1.创建布局文件

<androidx.constraintlayout.widget.ConstraintLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content">

<!--淡入淡出动画-->
     <Button
             android:id="@+id/btn_use_fade_in_fade_out_animator"
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_marginHorizontal="10dp"
             android:onClick="doClick"
             android:text="@string/use_fade_in_fade_out_animator"
             app:layout_constraintLeft_toLeftOf="parent"
             app:layout_constraintRight_toRightOf="parent"
             app:layout_constraintTop_toTopOf="parent" />

<androidx.constraintlayout.widget.ConstraintLayout
             android:layout_width="0dp"
             android:layout_height="0dp"
             app:layout_constraintDimensionRatio="w,1:1"
             app:layout_constraintLeft_toLeftOf="parent"
             app:layout_constraintRight_toRightOf="parent"
             app:layout_constraintTop_toBottomOf="@id/btn_use_fade_in_fade_out_animator">

<TextView
                 android:id="@+id/tv_content"
                 android:layout_width="0dp"
                 android:layout_height="0dp"
                 android:padding="16dp"
                 android:text="@string/test_use_fade_in_fade_out_animator_text"
                 android:visibility="gone"
                 app:layout_constraintBottom_toBottomOf="parent"
                 app:layout_constraintLeft_toLeftOf="parent"
                 app:layout_constraintRight_toRightOf="parent"
                 app:layout_constraintTop_toTopOf="parent" />

<!--进度条-->
         <ProgressBar
                 android:id="@+id/loading_progress"
                 style="?android:progressBarStyleLarge"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 app:layout_constraintBottom_toBottomOf="parent"
                 app:layout_constraintLeft_toLeftOf="parent"
                 app:layout_constraintRight_toRightOf="parent"
                 app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

2.设置淡入淡出动画

对于需要淡入的动画,首先将其可见性设置为GONE,这一点在布局文件中已经设置。在需要显示淡入的View的时候,首先将其alpha设置为0,这样可以保证View已经显示但是不可见。分别设置淡入的动画和淡出的动画,淡入的动画将其所在的View的alpha属性从0变化到1,淡出的动画将其所在的View的alpha属性从1变化到0对于淡出动画,在动画执行完成后,将其的可见性设置为GONE,从而加快处理速度。

3.代码实现

//开始执行淡入淡出动画
   private fun crossFade() {
       //设置需要淡入的View的alpha为0,可见性为VISIBLE
       mBinding.tvContent.apply {
           alpha = 0f
           visibility = View.VISIBLE
           //通过动画将透明度变为1.0
           animate()
               .alpha(1.0f)
               .setDuration(mShortAnimationDuration.toLong())
               .start()
       }

//设置需要淡出的动画,将其alpha从1变为0,并通过监听动画执行事件,在动画结束后将View的可见性设置为GONE
       mBinding.loadingProgress.animate()
           .alpha(0f)
           .setDuration(mShortAnimationDuration.toLong())
           .setListener(object : AnimatorListenerAdapter() {
               override fun onAnimationEnd(animation: Animator?) {
                   super.onAnimationEnd(animation)
                   mBinding.loadingProgress.visibility = View.GONE
               }
           })
           .start()
   }

来源:https://blog.csdn.net/weixin_42600398/article/details/122525505

标签:Android,动画,视图
0
投稿

猜你喜欢

  • 详解java整合solr5.0之solrj的使用

    2023-07-23 03:12:06
  • Jenkins Pipeline 部署 SpringBoot 应用的教程详解

    2022-09-26 14:06:27
  • Java输出链表倒数第k个节点

    2023-03-22 01:22:34
  • SpringBoot+WebSocket实现多人在线聊天案例实例

    2022-08-22 11:53:08
  • 详解C#中的委托

    2022-05-10 06:01:43
  • C#实现简单记事本程序

    2022-07-20 23:52:37
  • spring依赖注入知识点分享

    2023-11-26 15:32:32
  • springboot整合微信支付sdk过程解析

    2021-12-30 22:47:29
  • Android中Blade的使用方法

    2023-04-25 11:29:54
  • Javaweb基础入门requse原理与使用

    2021-10-07 20:55:29
  • Android实现底部支付弹窗效果

    2022-06-12 13:39:43
  • Jenkins节点配置实现原理及过程解析

    2023-02-14 11:53:30
  • c#发送请求访问外部接口的实例

    2023-05-25 17:43:30
  • C#实现简单的汽车租赁系统

    2022-08-17 00:51:52
  • Java中管理资源的引用队列相关原理解析

    2023-04-03 11:37:59
  • Dubbo实现分布式日志链路追踪

    2023-08-23 21:00:54
  • Java基础语法之二维数组详解

    2023-05-09 16:49:20
  • java多线程之线程同步七种方式代码示例

    2022-04-29 17:55:46
  • redis scan命令导致redis连接耗尽,线程上锁的解决

    2021-11-19 02:57:52
  • Android拼接实现动态对象方法详解

    2021-12-23 10:09:46
  • asp之家 软件编程 m.aspxhome.com