Android如何使用圆形揭露动画巧妙地隐藏或显示View详解

作者:QiShare 时间:2021-06-21 21:29:51 

1.引言

在开发过程中,我们经常会遇到需要显示或隐藏View视图的情况,如果在隐藏或显示View的过程中加上动画,能让交互更加的友好和动感,本文将介绍如何使用圆形揭露动画巧妙地隐藏或显示View。

2.圆形揭露动画简介

圆形揭露动画是动画的一种,是由ViewAnimationUtils类提供的,调用ViewAnimationUtils.createCircularReveal()方法可以创建圆形揭露动画,使用此动画要求API级别为21及以上版本,createCircularReveal()方法的参数如下:

//view:使用圆形动画的视图
//centerX:裁剪圆形的中心的X坐标,这个中心是指相对于视图本身
//centerY:裁剪圆形的中心的Y坐标,这个中心是指相对于视图本身
//startRadius:圆形的起始半径
//endRadius:圆形的结束半径
public static Animator createCircularReveal(View view,int centerX,  int centerY, float startRadius, float endRadius)

3.使用圆形揭露动画隐藏或显示View

3.1 简易布局

简易布局如下:

<LinearLayout 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:gravity="center_horizontal"
   android:orientation="vertical"
   tools:context=".MainActivity">

<Button
       android:id="@+id/btn_hide_or_show"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="隐藏或显示"
       android:textColor="@color/black"
       android:textSize="18sp" />

<ImageView
       android:id="@+id/imageView"
       android:layout_width="80dp"
       android:layout_height="80dp"
       android:layout_marginTop="50dp"
       android:src="@mipmap/ic_launcher"/>
</LinearLayout>

3.2 使用圆形揭露动画隐藏View

首先要计算得出View相对于自身的中心点的X坐标和Y坐标,然后调用Math.hypot()方法计算得出圆形的半径,接着调用ViewAnimationUtils.createCircularReveal(imageView, ivXCenter, ivYCenter, circleRadius, 0f)创建圆形揭露动画,增加动画执行的Listener,在动画执行结束后调用imageView.setVisibility(View.GONE),最后启动动画,示例如下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    int width = imageView.getWidth();
    int height = imageView.getHeight();
    int ivXCenter = width/2;
    int ivYCenter = height/2;
    float circleRadius = (float) Math.hypot(ivXCenter, ivYCenter);
    Animator circularReveal = ViewAnimationUtils.createCircularReveal(imageView, ivXCenter, ivYCenter, circleRadius, 0f);
    circularReveal.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            super.onAnimationEnd(animation);
            imageView.setVisibility(View.GONE);
            isVisible = false;
        }
    });
    circularReveal.start();
}else {
    imageView.setVisibility(View.GONE);
    isVisible = false;
}

3.3 使用圆形揭露动画显示View

使用圆形揭露动画显示View,先计算得出View相对于自身的中心点的X坐标和Y坐标,然后算出圆形的半径,接着创建圆形揭露动画,此时的起始半径是0f,结束半径是圆形的半径,调用imageView.setVisibility(View.VISIBLE),最后启动动画,示例如下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
   int width = imageView.getWidth();
   int height = imageView.getHeight();
   int ivXCenter = width/2;
   int ivYCenter = height/2;
   float circleRadius = (float) Math.hypot(ivXCenter, ivYCenter);
   Animator circularReveal = ViewAnimationUtils.createCircularReveal(imageView, ivXCenter, ivYCenter, 0f, circleRadius);
   imageView.setVisibility(View.VISIBLE);
   isVisible = true;
   circularReveal.start();
}else {
   imageView.setVisibility(View.VISIBLE);
   isVisible = true;
}

4.总结

使用圆形揭露动画隐藏或显示View,主要是计算出View相对于自身的中心点的X坐标和Y坐标,并计算出圆形半径,在调用ViewAnimationUtils.createCircularReveal()方法创建的时候要注意起始半径和结束半径的填写,隐藏View的时候在动画执行完毕后setVisibility()方法隐藏,显示View的时候,在动画启动前调用setVisibility()方法显示。

来源:https://juejin.cn/post/7086348131792584734

标签:android,隐藏,view
0
投稿

猜你喜欢

  • 用java实现杨辉三角的示例代码

    2023-08-12 09:02:21
  • android 实现类似微信缓存和即时更新好友头像示例

    2023-12-04 20:47:41
  • Android开发仿映客送礼物效果

    2023-03-24 01:11:12
  • Android自定义View实现五子棋游戏

    2021-12-25 19:32:55
  • java并发之ArrayBlockingQueue详细介绍

    2023-04-23 07:30:01
  • springboot依赖冲突问题及解决过程

    2023-03-13 11:49:53
  • Android项目实战之ListView悬浮头部展现效果实现

    2022-08-11 16:35:32
  • 基于C#生成随机数示例

    2023-06-27 08:40:17
  • OpenCV实现反阈值二值化

    2022-06-29 16:02:33
  • C#合并BitMap图像生成超大bitmap

    2023-12-08 18:24:11
  • c# 单例模式的实现方法

    2022-12-21 14:39:46
  • 完美解决SpringCloud-OpenFeign使用okhttp替换不生效问题

    2023-07-03 11:27:25
  • java实现队列数据结构代码详解

    2023-06-20 15:35:47
  • Android编程实现屏幕禁止休眠的方法

    2022-11-19 09:21:31
  • Android使用第三方服务器Bmob实现发送短信验证码

    2022-06-25 02:59:37
  • Tornadofx学习笔记之IconTextFx开源库整合5000+个字体图标

    2023-06-07 12:18:04
  • Spring-IOC容器中的常用注解与使用方法详解

    2021-05-26 23:37:45
  • Android zip文件下载和解压实例

    2023-12-17 01:11:17
  • java数据结构基础:栈

    2022-11-16 09:30:21
  • Spring Security中使用authorizeRequests遇到的问题小结

    2023-10-07 04:23:45
  • asp之家 软件编程 m.aspxhome.com