Android仿google now效果的呼吸按钮
作者:VitoZhangDeveloper 时间:2023-06-17 07:58:02
呼吸按钮是我最早接触到为view添加动画效果的需求,刚刚参加安卓开发工作,要求设计一个好看的语音按钮效果,就有了这个成果,但是后来又改方案了,所以我也就没有对该按钮进行封装为一个自定义按钮,本文主要是展示一种合理组合利用animation来实现一些好看的动画效果,只是一种思路。
先上图:
实现该效果,重要的是我们要如何实现这种动态的呼吸效果,因为是一种非线性运动,直接实现起来有些麻烦,特别是对于像我刚刚入行的菜鸟来说。但是幸好,android的SDK提供了一种叫interpolator属性,通过设置该属性为accelerate_decelerate_interpolato可以实现加速效果,使动画看起来更丰满,更具活力。
首先,我们需要三个anim文件。
进入效果anim:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:shareInterpolator="true">
<scale
android:fromXScale="0.0"
android:toXScale="0.9"
android:fromYScale="0.0"
android:toYScale="0.9"
android:pivotX="50%"
android:pivotY="50%"
android:duration="1000"/>
</set>
呼吸效果anim:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:shareInterpolator="true">
<scale
android:fromXScale="0.9"
android:toXScale="1.0"
android:fromYScale="0.9"
android:toYScale="1.0"
android:duration="1500"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:repeatMode="reverse"/>
</set>
退出效果anim:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:shareInterpolator="true">
<scale
android:fromXScale="0.95"
android:toXScale="0.0"
android:fromYScale="0.95"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="1000"/>
</set>
然后是Java代码,代码很简单,在MainActivity中,对按钮设置点击事件,唤起开始动画->执行呼吸动画->唤起结束对话。同时对开始和接收的动画进行监听,执行完毕后完成显示和隐藏背景的设置。部分代码:
private void initView() {
voice.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isVisible) {
back.startAnimation(animationIn);
isVisible = true;
} else {
back.startAnimation(animationExit);
isVisible = false;
}
}
});
}
Animtion动画相关部分代码
//动画监听
animationIn.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
back.startAnimation(animationVoice); //开始呼吸动画
back.setVisibility(View.VISIBLE);
}
});
animationExit.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
back.clearAnimation(); //清除动画
back.setVisibility(View.INVISIBLE);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
来源:https://blog.csdn.net/Vi2Zhang/article/details/50359770
标签:Android,google,now,呼吸按钮
0
投稿
猜你喜欢
SpringBoot的API文档生成工具SpringDoc使用详解
2021-11-09 07:15:45
Stream distinct根据list某个字段去重的解决方案
2022-06-22 22:23:26
JAVA中的Token 基于Token的身份验证实例
2023-11-09 18:05:09
C#多线程系列之线程完成数
2021-12-24 03:07:47
Android手机通过rtp发送aac数据给vlc播放的实现步骤
2023-11-10 00:48:02
Java虚拟机JVM性能优化(二):编译器
2023-12-03 21:21:57
C#如何让winform程序中的输入文本框保留上次的输入
2022-12-29 12:54:00
SpringMVC上传文件的两种方法
2023-11-17 14:27:20
Android应用中使用SharedPreferences类存储数据的方法
2022-06-11 20:27:08
java.util.NoSuchElementException原因及两种解决方法
2022-02-10 15:18:58
RecyclerView消除底部分割线的方法
2022-05-24 06:48:45
Java 中责任链模式实现的三种方式
2023-11-08 14:32:31
java如何读取超大文件
2022-10-24 08:20:54
对比Java中的Comparable排序接口和Comparator比较器接口
2023-10-29 04:29:51
Android实现上拉加载更多以及下拉刷新功能(ListView)
2022-03-02 15:50:41
Redis6搭建集群并在SpringBoot中使用RedisTemplate的实现
2023-10-31 14:48:05
Android handle-message的发送与处理案例详解
2023-07-21 09:28:13
ViewPager顶部导航栏联动效果(标题栏条目多)
2022-11-03 13:19:38
Spring MVC Mybatis多数据源的使用实例解析
2022-02-13 20:37:19
Android编程实现仿美团或淘宝的多级分类菜单效果示例【附demo源码下载】
2022-09-09 01:38:50