测试安卓动画插入器

六种插入器介绍:

<I>android.view.animation.Interpolator

interpolator

[in‘t?:p?uleit?]  跟读 口语练习

n. 窜改者,插入器;内插程序

<C>android.view.animation.AccelerateInterpolator

accelerate

英 [?k‘sel?re?t]   美 [?k‘s?l?ret]   全球发音 跟读 口语练习

vt. 使……加快;使……增速

vi. 加速;促进;增加

public float getInterpolation(float input) {

if (mFactor == 1.0f) { // 默认: mFactor = 1.0f;

return input * input; // x^2

} else {

return (float)Math.pow(input, 2 * mFactor);

}

}

测试:在负方向一直减速递减到0,之后在正方向再一直加速递增

注:对函数公式的测试,可以采用之间博文:自定义安卓函数曲线控件,从曲线变化趋势得到速率变化

<C>android.view.animation.DecelerateInterpolator

decelerate

英 [di?‘sel?re?t]   美 [,di‘s?l?ret]   全球发音 跟读 口语练习

vi. 减速,降低速度

vt. 使减速

public float getInterpolation(float input) {

float result;

if (mFactor == 1.0f) {

result = (float)(1.0f - (1.0f - input) * (1.0f - input));

} else {

result = (float)(1.0f - Math.pow((1.0f - input), 2 * mFactor));

}

return result;

}

测试:在1之前减幅递增,之后加幅递减

<C>android.view.animation.AccelerateDecelerateInterpolator

public float getInterpolation(float input) {

return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;

}

测试:2个数值之间为一个变化周期;在0到0.5之间为加幅递增,之后到1为减幅递增,之后又是加幅递减、减幅递减

<C>android.view.animation.CycleInterpolator

public float getInterpolation(float input) {

return (float)(Math.sin(2 * mCycles * Math.PI * input));

}

测试:速率在0到大概0.5之间递增,之后到大概0.7为减速,之后到0.9为负向加速,在到1为负向加速到0

<C>android.view.animation.LinearInterpolator

public float getInterpolation(float input) {

return input;

}

效果:速率保持不变(动画进度与速率变化保持一致)

<C>android.view.animation.OvershootInterpolator

overshoot   报错

英 [??v?‘?u?t]   美 [,ov?‘?ut]  跟读 口语练习

vt. 超越;打过头;把…做过头

vi. 射击越标;(飞机)滑出跑道;行动过火

n. 超越目标;行动过火

tension Amount of overshoot. When tension equals 0.0f, there is no overshoot and the interpolator becomes a simple deceleration interpolator.

超过的拉伸量。当拉伸为0时,这个插入器变成一个简单的减速插入器。

public float getInterpolation(float t) {

// _o(t) = t * t * ((tension + 1) * t + tension)

// o(t) = _o(t - 1) + 1

t -= 1.0f;

return t * t * ((mTension + 1) * t + mTension) + 1.0f;

}

测试(mTension = 2.0f;):0到0.5减幅递增到大概1.2,之后到1为减速至1

应用测试:

(某移动动画)

anim.setDuration(300);

anim.setInterpolator(new Interpolator() {

@Override

public float getInterpolation(float input) {

System.out.println(input);

return input;

}

});

06-26 14:38:03.087: I/System.out(27427): 0.0

06-26 14:38:03.087: I/System.out(27427): 0.0

06-26 14:38:03.097: I/System.out(27427): 0.036666665

06-26 14:38:03.117: I/System.out(27427): 0.093333334

06-26 14:38:03.127: I/System.out(27427): 0.15

06-26 14:38:03.147: I/System.out(27427): 0.20666666

06-26 14:38:03.167: I/System.out(27427): 0.26333332

06-26 14:38:03.177: I/System.out(27427): 0.32

06-26 14:38:03.197: I/System.out(27427): 0.37666667

06-26 14:38:03.217: I/System.out(27427): 0.43333334

06-26 14:38:03.227: I/System.out(27427): 0.49

06-26 14:38:03.247: I/System.out(27427): 0.5466667

06-26 14:38:03.267: I/System.out(27427): 0.60333335

06-26 14:38:03.287: I/System.out(27427): 0.6566667

06-26 14:38:03.297: I/System.out(27427): 0.7133333

06-26 14:38:03.317: I/System.out(27427): 0.77

06-26 14:38:03.337: I/System.out(27427): 0.83

06-26 14:38:03.347: I/System.out(27427): 0.8833333

06-26 14:38:03.367: I/System.out(27427): 0.94

06-26 14:38:03.387: I/System.out(27427): 1.0

06-26 14:38:03.397: I/System.out(27427): 1.0

不同移动距离,300毫秒持续时间,插入器被调用总是21次。

修改getInterpolation实现为“return input*input;”,效果:动画在更短时间内达到位置

修改getInterpolation实现为“return input/2;”,效果:动画在指定时间内未达到位置,画面闪烁之后达到位置。

总结:

主要有三点:

1、Interpolator就是一个“变化率”,一个基本动画的“变化率”。

2、input是一个0.0f~1.0f的浮点类型

3、假设距离为S,时间为t,速度为v,都知道S=v*t

猜测Interpolator的工作原理是:

首先,动画需要将during持续时间分割,得到连续的时间片

然后,循环时间片,通过每个时间片的位置在整个持续时间的比值,即动画过程进度,再使用Interpolator得到一个即时速率

最后,用即时速率x时间片长度得到一次偏移量,即一帧前后图像的位置偏移量

有没有可能在动画时间尚未结束,而已经到达目的位置的可能?或动画时间结束时并未到达目的位置?

而且还有一个问题是:持续时间并不能总和实际的动画时间一致,那又对此如何处理呢?

猜测安卓采用的一种策略是:首先完成时间之间的动画过程,之后做后续的调整。

而观察以上所有插入器的特点得知:在0~1之间所经过的路径总是超过匀速通过的路径,即都保证了在动画结束时都可以达到指定位置。

最好的速率控制是:在相同时间内,自定义速率变化和匀速走过的路径是相同的。即就像两个人摩托一样,一个人保持匀速,一个人按照逻辑的变化速度(甚至晚会走),最后都同时达到,这个速度的控制逻辑就是最好的。

但设计一个函数公式时,不仅要考虑时间和面积,还要考虑移动端的运算性能,而事实上不可兼得也是可以理解的。

参考:

http://blog.sina.com.cn/s/blog_4a6c59d60100wznv.html (Android 动画之Interpolator插入器 )

时间: 2024-08-26 14:50:51

测试安卓动画插入器的相关文章

2015元宵节礼物——《刀塔传奇》骨骼动画查看器,开源啦!

首先声明,我不是第一个做出类似查看器的首作者,我所知道的首作者是johance,以下是它在cocoschina发布的贴子. 分享 刀塔查看器Flash導出版本(帶詳細解析說明)和Flash導入導出批處理文件      http://www.cocoachina.com/bbs/read.php?tid-219173.html 贴子里面描述了<刀塔传奇>骨骼动画的文件格式,我是参考这个文件格式写出来的.我的实现思路是将*.fca文件转换成DragonBonesCPP所需要的格式,然后就可以通过D

Android短信插入器源码

package com.examp.createsms; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentValues; import android.net.Uri; import android.os.Bundle; public class MainActivity extends Activity { @Override protected

安卓手机文件管理器简单横向评比 - imsoft.cnblogs

  X-plore文件管理器 个人评价:安卓手机上管理文件的神器,所有文件一览无余,加上自己对软件常用功能的配置,管理文件无比方便.(本人一直使用)   Solid文件管理器 个人评价:用户体验真的很不错,初次使用就被其完美的界面和简单明了的操作所吸引   ES文件浏览器: 个人评价:远程文件管理算是这几个中最好的了,上面S.E.和X-plore两个总是存在问题. 总结: 目前的使用是搭配使用中,用X-plore来在手机上管理手机文件,用ES来远程管理文件.Solid主要是推荐给界面以及用户体验

【翻译】安卓新播放器EXOplayer介绍

http://developer.android.com/guide/topics/media/exoplayer.html ? 前言: Playing videos and music is a popular activity on Android devices. The Android framework provides?MediaPlayer?as a quick solution for playing media with minimal code, and the?MediaC

使用appium框架测试安卓app时,获取toast弹框文字时,前一步千万不要加time.sleep等等待时间。

使用appium框架测试安卓app时,如果需要获取toast弹框的文案内容,那么再点击弹框按钮之前,一定记得千万不要加time.sleep()等待时间,否则有延迟,一直获取不到: 获取弹框的代码: message=self.driver.find_element_by_xpath("//*[contains(@text,'成功添加到购物车')]")   原文地址:https://www.cnblogs.com/zhouchuanlun/p/12687890.html

谷歌:开发Nexus设备是为了测试安卓新系统

Nexus 6已经通过谷歌Play Store和摩托罗拉官网开售,近期谷歌高管Hiroshi Locheimer在接受采访时谈及了Nexus项目以及谷歌最新安卓系统5.0.菠菜娛樂賭場 在谈到安卓Nexus设备时,Hiroshi Locheimer表示,Nexus项目并非是为了跟其他手机制造商进行竞争,该项目背后的理念就是为了测试最新版安卓系统.他表示,Nexus品牌目标绝非是为了获得市场份额. 此外,Hiroshi Locheimer也提到,安卓5.0是首款在桑达尔·皮查伊(Sundar Pi

2015最新安卓开源播放器排名云视链在榜

很多同学问我安卓上哪些开源播放器比较好,这里我就统一排行一下. 1.Dolphin播放器(Dolphin Player)是一款开源的音频和视频播放器,它支持大多数的音频和视频文件模式,也支持大部分的字幕文件格式.它是基于ffmpeg的.在自己手机上装 了一下,感觉不错,绝大部分视频和音频都能播放,同时可以设置ffmpeg内核的很多参数. 特性: 支持多种字幕文件格式(srt, sub, utf, utf8..) 支持常用的音频视频播放操作 (播放, 暂停, 前进, 倒回, 调节音量) 支持 Ht

使用DDMS测试安卓手机APP的性能(android)

安装/配置: 通过另外一个工具也可以测试手机客户端APP的性能,这就是android开发包中的DDMS工具(Dalvik Debug Monitor Service),先来说一下android开发包的安装: 1. 首先安装JDK,1.5以上的版本 2. 在安装完JDK 后,就需要下载及安装Android SDK,即: android-sdk-windows,压缩包大约有551M左右 3. 解压缩android-sdk-windows,放在C盘的根目录下,配置系统变量path 的值为:C: \an

安卓加密视频播放器使用教程

1.   下载文件 http://pan.baidu.com/s/1i55CN6P 2.    操作流程 温馨提示 播放时,请务必保证播放设备联网(原因:用户名权限验证需要网络,播放后10秒即可关闭网络) a)     在安卓手机上安装"安卓播放器.apk" b)     运行DrmPlayer,输入用户名.密码(学员付费后请联系韩小平老师或其他工作人员,发放用户名.密码) c)     选择播放视频文件路径(一般为mnt\SDCard 或 mnt\exSDCard 或 mnt\SDC