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


猜你喜欢
- 本文实例为大家介绍了几个可用的类,供大家参考,具体内容如下1.SQLHelper类using System;using System.Col
- 前言所谓的字符串其实就是一串连续的字符,它是由许多单个字符连接而成的。如多个英文字母所组成的一个英文单词。字符串中可以包含任意字符,这些字符
- EasyTouch摇杆插件使用,先给大家展示下效果图:Demo展示双指缩放在电脑端无法掩饰,竖屏将就看看吧;插件名叫EasyTouch,有需
- 我们在用maven构建java项目时,最常用的打包命令有mvn package、mvn install、deploy,这三个命令都可完成打j
- 0 写在前面在实际工作中有一些地方需要用到截取字符串的方法,所以在此记录下截取字符串的几种方法。.substring()StringUtil
- 本文实例为大家分享了Android7.0 MTK设置默认桌面的具体代码,供大家参考,具体内容如下项目需求:客户安装自己公司的桌面apk,安装
- 如果 d:\upload\file\ 文件夹不存在,会报错String strPath = "d:\\upload\\file\\
- 目录1.启动分为两种方式2.如何测量一个应用的启动时间3.应用启动的流程4.减少应用的启动时间的耗时5.如何设计延迟加载DelayLoad1
- 经典排序算法 - 冒泡排序Bubble sort原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或
- 微信公众号发送模版消息 背景:如下图,当用户发布需求的时候,公众号自定推送消息。例如:微信支付的时候,公众号会推送支付成功消息前提:发送模版
- 一、Mybatis一对多分解式查询分解式查询就是将一条Sql语句拆分成多条在MyBatis多表查询中,使用连接查询时一个Sql语句就可以查询
- 本文实例讲述了java实现的五子棋游戏代码,分享给大家供大家参考,具体代码如下package gyb.exam;import java.aw
- Date类概述java.util.Date类 表示特定的瞬间,精确到毫秒。 继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分
- 它所表示的是“这部分是无法修改的”。不想被改变的原因有两个:效率、设计。使用到final的有三种情况:数据、方法、类。一、 final数据有
- 一、背景1.1 应用系统的架构历史1.2 什么是微服务?起源:微服务的概念源于 2014 年 3 月 Martin Fowler 所写的一篇
- 简介前提条件:确保本机已经安装 VS Code。确保本机已安装 SSH client, 并且确保远程主机已安装 SSH server。VSC
- 本文实例为大家分享了Unity实现弧形移动效果的具体代码,供大家参考,具体内容如下一、实现效果二、第一种实现方法——弧形插值using Un
- 目录前言演示效果:实现步骤:核心点:总结前言流布局在在项目中还是会时不时地用到的,比如在搜索历史记录,分类,热门词语等可用标签来显示的,都可
- 本文实例为大家分享了java实现猜数游戏的具体代码,供大家参考,具体内容如下有开始界面,可以设置范围,设置猜的次数代码如下:public s
- 🚀 ChatGPT是最近很热门的AI智能聊天机器人🚀 本文使用SpringBoot+OpenAI的官方API接口,自己实现一个可以返回对话数