让界面动画更自然

转载自:ISUX的让界面动画更自然腾讯ISUX (http://isux.tencent.com/animation-factor.html)

顺便小手一抖,推荐个网页转pdf的工具http://pdfmyurl.com/,大家自己用去吧,不用客气。


titile

随着软硬件技术的发展,界面动画在我们的日常生活中随处可见。桌面软件、移动应用、云服务此刻回顾四周我相信你一定能发现他们。

在产品中动画未必越多越好,也未必越炫越好。不同的产品类型对动画的要求也不同。常见的动画主要承担向用户解释界面与界面之间的关系,元素与元素间的关系以及特定元素的强化。

如果你关注过界面动画,你可能见过以下这些动画曲线。摘自 http://easings.net/

让界面动画更自然

他们表述了动画变化的程度与时间的关系。通过合理利用这些动画曲线背后的原理,可以让动画看起来更加真实。

这里说到我们要让界面动画更自然。如何做到自然?只要遵循客观物理规律以及人得视觉经验,动画就会看上去真实自然。

为什么要讲动画函数?相信很多设计师看到下面的文章会的觉得太枯燥。

那我们回到产品研发过程,在产品里,常见的动画实现有这么几种:

  1. 设计师逐帧绘制;开发同学实现循序/循环播放逻辑。
  2. 设计师提供动画资源文件如(视频、flash、gif);开发同学将资源嵌入产品。
  3. 设计师提供动画形式、参数与元素;开发同学完成动画实现,如:html5/CSS动画。

文本想针对第三种形式,帮助设计师了解动画背后的科学知识,可以有具体的参数与开发同学沟通。

如果你熟悉物理课本里的运动公式,请跳过第一部分。

运动动画

我们先从最简单的运动动画说起。我们客观物理规律还是得从牛顿第二定律说起。F=ma,如果大家不明白这个公式,没关系。

请允许我不那么讲究术语的严谨性。通俗点来说,就是运动动画响应变化情况与执行动画的物体本身有关。如果你想表现的物体是一个沉甸甸的,那么他们的起始动画响应/参数的变化会比较慢。反之,物体是轻巧的,那么其起始动画响应/参数的变化会比较快。

让界面动画更自然

从图上可以看到如果是相同的操作且移动相同的距离,轻巧的所花的时间越短。

阻尼动画

提到阻尼,需要介绍三个概念:临界阻尼、过阻尼、欠阻尼。

临界阻尼

生活中一些高档的门或橱柜。他们在开合的过程中为了不造成太大的声响,他们的机械结构阻尼会尽量设计接近临界阻尼。这个过程最容易让人接受,不会感觉有外界干扰。过阻尼和欠阻尼,通常能让你感觉到有一只隐形的手,阻碍或促进运动。

过阻尼

从字面上会容易理解,就是阻尼很大,阻碍运动的发展。有些自动门或电梯门在闭合的过程中,在最后段里往往需要更长的时间。另外,记忆枕的恢复的过程也是过阻尼。

欠阻尼

阻尼不够,继而形成了振荡的特征。生活中的一些弹簧门,在关闭的过程中,会多次摆动,最终趋于闭合。

让界面动画更自然

做一个比较细腻的界面动画时候,如果追求理性一些,可以把动画的成果拆解成三个阶段。启动、运行、收尾。设计师需要花更多的时间去考虑启动与收尾过程。

让界面动画更自然

  • 启动阶段:体现力质量环境,可以表现材质的轻盈与厚重。
  • 收尾阶段:体现质量速度环境。阻尼通常在这个阶段体现。

举个例子

请大家关注启动与收尾阶段。

让界面动画更自然

让界面动画更自然

动画曲线仅作示意感受,可能与实际动画有所出入。

呼吸动画

呼吸动画,常用于界面元素的提醒。

对于这个动画,设计师最直观的印象就是闪烁。在实施的过程中,对于闪烁一词会被赋予不同的理解。

  • 设计师眼中的闪烁:“渐显 -> 渐隐 -> 渐显 -> 渐隐”;
  • 工程师眼中的闪烁:“显示 -> 隐藏 -> 显示 -> 隐藏”;

如何把动画做得更细腻,就在于如何将渐显与渐隐的过程如何描述得更加仔细。

对于最早的渐显、渐隐动画,我首先想到了三角函数。

让界面动画更自然

仔细观察这个函数,可以发现他的特点是在一个周期里是启动渐增、收尾减缓的过程。适合开发利用简单代码实现的动画效果。

有兴趣的同学可以用原型感受一下。做闪烁动画,用到三角函数其实就可以满足大部分场景。

我在尝试的动画的时候,把他作为呼吸函数来看,总觉得哪里还是不太自然。看起来“呼吸比较急促”。

我们来分析一下呼吸函数。

为什么看起来呼吸局促呢?请各位看官现在试试深呼吸,体会一下。你会发现在我们的在吸气的阶段,很快会就达到肺撑满的状态,然后吐气的阶段可以持续很久。大体上比例分布是这样的。

让界面动画更自然

 

融合入三角函数,将起始的渐增与收尾的减缓引入。感谢Don同学提供了一个完整的函数。

这个函数的周期为6,峰值出现在2。整个变化起始与收尾都是渐变过渡。

让界面动画更自然

让界面动画更自然

k=1/3,t=6, n={1,2,3,…}

大家感受一下

之前我利用了些业余时间,在Arduino硬件上试了一下。大家可以看一下视频。我以为渐显、渐隐的动画的是这个样的:
让界面动画更自然
简单三角函数的呼吸灯

其实应该是这样的:
让界面动画更自然
使用呼吸函数的呼吸灯

其他

除了在动画变化过程中对客观规律的描述外,对于用户场景的还原也能增加自然感。
比如这个站点的checkbox。我们在日常生活中,面对纸质的选项,我们会选择涂抹的方式来进行选择。

让界面动画更自然

或者这样删除

让界面动画更自然

更多效果,可以访问动态checkbox

写在最后的小工具

如果使用 Mac 的小伙伴,Apple 提供了一个绘制函数图像的利器 Grapher。本文的函数均由此工具绘制。感兴趣的同学可以尝试用一下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android 呼吸动画可以使用 `ValueAnimator` 实现,具体实现步骤如下: 1. 在 XML 布局文件中添加一个需要执行动画的 View。 2. 在代码中获取该 View 并创建一个 `ValueAnimator` 对象,设置动画时长、动画插值器等。 3. 在 `ValueAnimator` 中设置动画数值变化的范围,例如从 0 到 1。 4. 在动画监听器中实现数值变化的回调方法,并根据数值变化来新 View 的状态,例如设置 View 的透明度。 5. 开始动画,调用 `ValueAnimator` 的 `start()` 方法。 具体代码实现如下: ```java // 获取需要执行动画的 View View view = findViewById(R.id.view); // 创建 ValueAnimator 对象 ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f); animator.setDuration(2000); animator.setInterpolator(new AccelerateDecelerateInterpolator()); // 设置动画数值变化的回调方法 animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { // 获取动画数值 float value = (float) animation.getAnimatedValue(); // 根据数值变化来新 View 的状态 view.setAlpha(value); view.setScaleX(value); view.setScaleY(value); } }); // 开始动画 animator.start(); ``` 这段代码实现了一个简单的呼吸动画,将 View 的透明度和缩放比例都随时间变化而改变。你可以根据实际需求来修改动画效果。 ### 回答2: Android平台上的呼吸动画是用于在界面上展示一种有节奏的呼吸效果的动画效果。这种动画效果通过调整视图或组件的透明度或尺寸缩放来实现。 实现Android呼吸动画的一种常见方式是使用属性动画(Property Animation)。属性动画可以指定某个属性在一定的时间内从起始值平滑地过渡到结束值。在呼吸动画中,我们可以通过改变视图或组件的透明度或尺寸来产生呼吸效果。 具体实现步骤如下: 1. 创建一个XML文件来定义动画效果。在XML文件中,我们可以定义属性动画所需的属性,如起始值、结束值、持续时间等。 2. 在Java代码中,通过加载XML文件来创建一个属性动画对象。 3. 将属性动画对象与视图或组件相关联,以便在这个对象上执行动画效果。 4. 为属性动画对象设置插值器(Interpolator),用来控制动画的速度变化。例如,使用加速度插值器可以让动画以递增的速度进行。 5. 启动动画,使其在界面上显示出呼吸效果。 通过以上步骤,我们可以在Android应用程序中实现一个简单的呼吸动画效果。 除了使用属性动画,还可以使用其他方式来实现呼吸动画效果,如通过帧动画(Frame Animation)或自定义的动画效果。 总之,Android平台上的呼吸动画可通过属性动画来实现。这种动画效果可以增加界面的交互性和吸引力,为用户提供好的使用体验。 ### 回答3: Android呼吸动画是一种常用的动画效果,通过改变视图的透明度、缩放或大小等属性,营造出类似于呼吸般的效果。它能够为用户提供一种沉浸式的交互体验,使界面加生动有趣。 对于开发者来说,实现Android呼吸动画相对简单。首先,可以利用Android中的属性动画类,如ValueAnimator或ObjectAnimator,来控制视图的属性变化。通过设置动画的duration、repeatCount和interpolator等属性,可以实现不同速度、方向和循环次数的呼吸效果。 另外,也可以利用Android提供的插值器(Interpolator)来控制动画的变化曲线,使得呼吸动画加平滑自然。比如,可以使用加速插值器(AccelerateInterpolator)来实现呼吸动画的加速效果,或者使用弹性插值器(BounceInterpolator)来实现呼吸动画的反弹效果。 除了属性动画和插值器,Android还提供了许多其他的动画特效,如补间动画、帧动画等,也可以使用它们来实现呼吸动画。补间动画通过定义关键帧,控制动画的开始和结束状态,可以创建出连续平滑的动画效果。帧动画则是将一系列静态图像连续播放,形成动画效果。 总的来说,Android呼吸动画是一种简单易用、灵活多样的动画效果,可以为用户带来好的交互体验。开发者可以根据自己的需求和创意,灵活运用Android提供的动画API,实现出独特、吸引人的呼吸效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值