Android 应用的动画实践--View Animation篇

简介:

前言

尝试搜索了一下android 动画的中文资料,很多都是一些枯燥的翻译api的一些文档,很少有系统讲解如何利用动画开发一个应用的资料,忽然,发现很多应用也不怎么注重动画在app的应用,想了想,自己尝试总结一下吧。因为,本人也不是什么动画制作师,没法把动画做得很绚丽,只好,利用内置的效果,进行简单加工,如何发挥,由各位的创意来定。鉴于,很多有关的android的动画资料里面,都是堆代码的,所以,全部代码均放在了github上面,查看完整代码可以移步到github上面去

特地说明一下,由于android 模拟器和录制工具的原因,例子展示中的gif 的抽筋播放效果不等同于实际效果,自己脑补把抽筋的部分去掉

android 动画基础

在Android 里你能够使用的动画效果:

  • 平移

  • 缩放

  • 旋转

  • 透明

以上动画的基本使用就是本文的内容了。由于,本人的能力问题,实在搞不出让人眼前一亮的动画,就凑合着看着吧。不过,那些令人赞叹的动画效果的基础就是这些。

Interpolators(插值器)

一般而言,要做动画的,需要封装点物理公式,用作为计算帧与帧间的数值计算,不过,如果,只是,为了搞些动画让app好用一些,倒不需要搞得这么复杂,android 官方api 已经封装好了一些常用的动画插值器。

默认内置7种类型的插值器,个人觉得,如果只是应用里面的一些动画的话这7个就够用了。

  1. AccelerateInterpolator

    加速          
    AccelerateInterpolator

  2. Decelerate

    减速          
    decelerate

  3. AccelerateDecelerateInterpolator

    开始,和结尾都很慢,但是,中间加速          
    accelerate_decelerate

  4. AnticipateInterpolator

    开始向后一点,然后,往前抛          
    AccelerateInterpolator

  5. OvershootInterpolator

    往前抛超过一点,然后返回来          
    overshoot

  6. AnticipateOvershootInterpolator

    开始向后一点,往前抛过点,然后返回来          
    anticipate_overshoot

  7. BounceInterpolator

    结束的时候弹一下          
    bounce

  8. LinearInterpolator

    匀速

以上动画都源自android官方api demo,用eclipse adt android 选择例子项目导航,然后,选择APIDEMOS 就能创建(什么没听说过?现在知道了吧。。。)

好了,虽然截取的gif 动画播放起来有点抽筋的感觉,接下来我们该如何在应用中使用这些知识呢?

组合动画

目前讲解动画api 的资料比较多,这里就不在重复那些基础的知识了!

现在让我们学习一下,如何利用,平移,缩放,旋转创造出让人眼前一亮的动画.

为了,更有目的的使用动画,下面假想一个使用场景。

假想:商品购物车案例

Notice :为了方便看效果,动画延时时间将会设置的比较长。特地说明一下:假想就是随便想,切勿对号入座。

任务:

为了,让商城app有更好的交互效果,决定对购物车控件和商品控件上面加一些动画效果。

购物车动画设计方案:

利用,透明,平移,对购物车的出现和离开增加动画交互效果。

经过一番努力效果如下(凑合着看吧。。):

anim1

相关知识点

一些动画常用的通用基础属性:

Notice: 所谓通用就是说所有动画标签都适用于这些属性

  • android:duration 设置动画播放的时间

  • android:startOffset 设置动画的开始播放时间

  • andorid:interpolator 设置动画的插值器

  • android:repeatCount 动画播放的常用次数

  • android:repeatMode 动画重播的模式,即从头到尾,从头到尾,还是从头到尾,在从尾到头。

透明的使用:

<alpha />

value 从 0 (透明) 到 1 (不透明)在android中透明主要用于对view 淡入,淡出的效果控制主要有两个属性

  • android:fromAlpha view在动画开始的透明度。

  • android:toAlpha view在动画结束的透明度。

平移的使用:

<translate />

支持使用 %,如 “50%“ 获取的是这个view的百分之50,除此之外还有另外一种写法:”50%p“ 意思是获取这个view的上一级view的百分之50 当然,指定特定值也是支持的“22.2”,不过为了兼容更多的android设备建议还是使用百分比的值。

  • android:fromXDelta

  • android:fromYDelta

    from?Delta 意思是开始的轴线

  • android:toXDelta

  • android:toYDelta

    to?Delta 意思是结束的轴线

这次的方案展示了两个插值器的使用:

用于出现的:BounceInterpolator

用于离开的: AnticipateInterpolator

什么是插值器?

所谓插值器就是用于数值的起始间的变化,就是相当于一个类似于物理引擎的东西。android官方内置了一些简单常用的数值变换,让我们,不需要去学习相关的物理知识。

例如:

开始值为1,结束值为 100.那么我们如何控制变化这个值的变化过程呢?这里就是插值器的使用。

一般匀速的话就是:

1,2,3,4,5...100。 然后我们就会看到物体以一个匀速的速度进行平移操作。

那么我们需要物体像汽车那样加速度的前进,我们可以用加速插值器,我们从1到100的过程,就会是:

1,2,4,5,8,16.。。。。100 展示在我们面前的view对象就会以一个加速度的形式进行平移。

有很多应用开发者并不熟悉动画制作的一些基础知识,可能不太明白。现在,通过对源码进行分析,来彻底搞明白这个概念。

我们分析一些Interpolator 类树:

从api文档TimeInterpolator 我们可以知道,这个插值器的实现只有一个方法:

getInterpolation(float t);

然后我们挑选前面用过的BounceInterpolator 看下,它是如何实现这个方法。如果感兴趣的,可以按照这种方法,把其他几个插值器的实现都看一遍。

最后我们会发现,插值器的作用就是返回值。

接着我们来看下Animation line:869 是怎么用这个接口的.

看完这这几个地方,相信应该对android 动画框架怎么对值进行变换的原理应该有所了解。

有了以上知识,我们对android的动画框架基本上已经完全了解,现在,我们利用学到的知识,进行更好的动画设计。

我们接着刚才的案例,着手设计商品控件的动画设计

商品动画设计:

这次,我们学习一个新的动画标签缩放(<scale>)

效果如下:

shop1

<scale />

使view 大点或者小点

  • android:fromXScale

  • android:fromYScale

    from?Scale 意思是开始轴线的缩放比例(默认 1.0)

  • android:toXScale

  • android:toYScale

    to?Scale 意思是结束轴线的缩放比例(默认 1.0)

  • android:pivotX

  • android:pivotX

    旋转用的轴点坐标

最后我们把购物车的动画,和商品的动画在组合起来。效果如下:

添加商品的时候,如果购物车还没出现,先出现购物车显示的动画,在进行商品的动画播放。

具体实现 line: 77 -104


shop2

这次我们学习一下如何监听动画的动作,对于AnimationListener()主要有三个

  • onAnimationStart(Animation animation)

  • onAnimationRepeat(Animation animation)

  • onAnimationEnd(Animation animation)本文转自youxiachai 博客,原文链接:http://blog.51cto.com/youxilua/1213510   如需转载请自行联系原作者

相关文章
|
11天前
|
安全 Android开发 Kotlin
Android经典实战之SurfaceView原理和实践
本文介绍了 `SurfaceView` 这一强大的 UI 组件,尤其适合高性能绘制任务,如视频播放和游戏。文章详细讲解了 `SurfaceView` 的原理、与 `Surface` 类的关系及其实现示例,并强调了使用时需注意的线程安全、生命周期管理和性能优化等问题。
43 7
|
5天前
|
缓存 搜索推荐 Android开发
安卓应用开发中的自定义View组件实践
【9月更文挑战第10天】在安卓开发领域,自定义View是提升用户体验和实现界面个性化的重要手段。本文将通过一个实际案例,展示如何在安卓项目中创建和使用自定义View组件,包括设计思路、实现步骤以及可能遇到的问题和解决方案。文章不仅提供了代码示例,还深入探讨了自定义View的性能优化技巧,旨在帮助开发者更好地掌握这一技能。
|
7天前
|
Android开发
Android中SurfaceView的双缓冲机制和普通View叠加问题解决办法
本文介绍了 Android 平台上的 SurfaceView,这是一种高效的图形渲染控件,尤其适用于视频播放、游戏和图形动画等场景。文章详细解释了其双缓冲机制,该机制通过前后缓冲区交换来减少图像闪烁,提升视觉体验。然而,SurfaceView 与普通 View 叠加时可能存在 Z-Order 不一致、同步问题及混合渲染难题。文中提供了使用 TextureView、调整 Z-Order 和创建自定义组合控件等多种解决方案。
38 9
|
5天前
|
开发框架 Android开发 iOS开发
探索安卓与iOS开发的差异:构建未来应用的指南
在移动应用开发的广阔天地中,安卓与iOS两大平台各占半壁江山。本文将深入浅出地对比这两大操作系统的开发环境、工具和用户体验设计,揭示它们在编程语言、开发工具以及市场定位上的根本差异。我们将从开发者的视角出发,逐步剖析如何根据项目需求和目标受众选择适合的平台,同时探讨跨平台开发框架的利与弊,为那些立志于打造下一个热门应用的开发者提供一份实用的指南。
17 5
|
3天前
|
Android开发 开发者 Kotlin
告别AsyncTask:一招教你用Kotlin协程重构Android应用,流畅度飙升的秘密武器
【9月更文挑战第13天】随着Android应用复杂度的增加,有效管理异步任务成为关键。Kotlin协程提供了一种优雅的并发操作处理方式,使异步编程更简单直观。本文通过具体示例介绍如何使用Kotlin协程优化Android应用性能,包括网络数据加载和UI更新。首先需在`build.gradle`中添加coroutines依赖。接着,通过定义挂起函数执行网络请求,并在`ViewModel`中使用`viewModelScope`启动协程,结合`Dispatchers.Main`更新UI,避免内存泄漏。使用协程不仅简化代码,还提升了程序健壮性。
13 1
|
11天前
|
Android开发 容器
Android经典实战之如何获取View和ViewGroup的中心点
本文介绍了在Android中如何获取`View`和`ViewGroup`的中心点坐标,包括计算相对坐标和屏幕上的绝对坐标,并提供了示例代码。特别注意在视图未完成测量时可能出现的宽高为0的问题及解决方案。
23 7
|
2天前
|
监控 算法 数据可视化
深入解析Android应用开发中的高效内存管理策略在移动应用开发领域,Android平台因其开放性和灵活性备受开发者青睐。然而,随之而来的是内存管理的复杂性,这对开发者提出了更高的要求。高效的内存管理不仅能够提升应用的性能,还能有效避免因内存泄漏导致的应用崩溃。本文将探讨Android应用开发中的内存管理问题,并提供一系列实用的优化策略,帮助开发者打造更稳定、更高效的应用。
在Android开发中,内存管理是一个绕不开的话题。良好的内存管理机制不仅可以提高应用的运行效率,还能有效预防内存泄漏和过度消耗,从而延长电池寿命并提升用户体验。本文从Android内存管理的基本原理出发,详细讨论了几种常见的内存管理技巧,包括内存泄漏的检测与修复、内存分配与回收的优化方法,以及如何通过合理的编程习惯减少内存开销。通过对这些内容的阐述,旨在为Android开发者提供一套系统化的内存优化指南,助力开发出更加流畅稳定的应用。
10 0
|
7天前
|
开发工具 Android开发 iOS开发
探索安卓与iOS开发的差异:构建未来应用的关键考量
在数字时代的浪潮中,安卓和iOS这两大操作系统如同双子星座般耀眼夺目,引领着移动应用的潮流。它们各自拥有独特的魅力和深厚的用户基础,为开发者提供了广阔的舞台。然而,正如每枚硬币都有两面,安卓与iOS在开发过程中也展现出了截然不同的特性。本文将深入剖析这两者在开发环境、编程语言、用户体验设计等方面的显著差异,并探讨如何根据目标受众和项目需求做出明智的选择。无论你是初涉移动应用开发的新手,还是寻求拓展技能边界的资深开发者,这篇文章都将为你提供宝贵的见解和实用的建议,帮助你在安卓与iOS的开发之路上更加从容自信地前行。
|
Android开发
Android Animation动画
Android Animation动画
138 0
Android Animation动画
|
API Android开发
【Android 属性动画】属性动画 Property Animation 与 视图动画 View Animation 区别
【Android 属性动画】属性动画 Property Animation 与 视图动画 View Animation 区别
122 0