原文:http://www.androidcn.org/topic/552e65bc61d460226ab27a5c

在应用中,有时候我们要吸引用户去点击某些按钮,比如应用市场的推荐按钮,为了能够吸引用户主动点击而且不过分的打扰用户,最好的方法就是给我们想吸引用户注意的view添加一些抖动动画,比如这张图

这里我主要实现了两种抖动动画,左右抖动和上下抖动。左右抖动通常用于表单验证失败的时候,上下抖动通常用于吸引用于用户去点击。动画主要使用了Keyframe和PropertyValuesHolder。

Keyframe是一个时间/值对,用于定义在某个时刻动画的状态。比如Keyframe.ofInt(.5f, Color.RED)定义了当动画进行了50%的时候,颜色的值应该是Color.RED。

PropertyValuesHolder保存了view的属性的信息以及在动画进行过程中该属性的值。通过 PropertyValuesHolder.ofKeyframe方法来构建PropertyValuesHolder的实例,改方法接收一个属性名以及 多个Keyframe对象作为参数。当你想通过动画改变多个属性的时候PropertyValuesHolder就非常有用。

直接上代码:

tada方法实现了上下抖动。抖动的原理很简单,就是对view的x轴和y轴进行0.9倍到1.1倍的缩放,同时对view进行一定角度的上下旋转。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public static ObjectAnimator tada(View view) {  
    return tada(view, 1f);  }  
  public static ObjectAnimator tada(View view, float shakeFactor) {  
   
    PropertyValuesHolder pvhScaleX = PropertyValuesHolder.ofKeyframe(View.SCALE_X,  
            Keyframe.ofFloat(0f, 1f),  
            Keyframe.ofFloat(.1f, .9f),  
            Keyframe.ofFloat(.2f, .9f),  
            Keyframe.ofFloat(.3f, 1.1f),  
            Keyframe.ofFloat(.4f, 1.1f),  
            Keyframe.ofFloat(.5f, 1.1f),  
            Keyframe.ofFloat(.6f, 1.1f),  
            Keyframe.ofFloat(.7f, 1.1f),  
            Keyframe.ofFloat(.8f, 1.1f),  
            Keyframe.ofFloat(.9f, 1.1f),  
            Keyframe.ofFloat(1f, 1f)  
    );  
   
    PropertyValuesHolder pvhScaleY = PropertyValuesHolder.ofKeyframe(View.SCALE_Y,  
            Keyframe.ofFloat(0f, 1f),  
            Keyframe.ofFloat(.1f, .9f),  
            Keyframe.ofFloat(.2f, .9f),  
            Keyframe.ofFloat(.3f, 1.1f),  
            Keyframe.ofFloat(.4f, 1.1f),  
            Keyframe.ofFloat(.5f, 1.1f),  
            Keyframe.ofFloat(.6f, 1.1f),  
            Keyframe.ofFloat(.7f, 1.1f),  
            Keyframe.ofFloat(.8f, 1.1f),  
            Keyframe.ofFloat(.9f, 1.1f),  
            Keyframe.ofFloat(1f, 1f)  
    );  
   
    PropertyValuesHolder pvhRotate = PropertyValuesHolder.ofKeyframe(View.ROTATION,  
            Keyframe.ofFloat(0f, 0f),  
            Keyframe.ofFloat(.1f, -3f * shakeFactor),  
            Keyframe.ofFloat(.2f, -3f * shakeFactor),  
            Keyframe.ofFloat(.3f, 3f * shakeFactor),  
            Keyframe.ofFloat(.4f, -3f * shakeFactor),  
            Keyframe.ofFloat(.5f, 3f * shakeFactor),  
            Keyframe.ofFloat(.6f, -3f * shakeFactor),  
            Keyframe.ofFloat(.7f, 3f * shakeFactor),  
            Keyframe.ofFloat(.8f, -3f * shakeFactor),  
            Keyframe.ofFloat(.9f, 3f * shakeFactor),  
            Keyframe.ofFloat(1f, 0)  
    );  
   
    return ObjectAnimator.ofPropertyValuesHolder(view, pvhScaleX, pvhScaleY, pvhRotate).  
            setDuration(1000);  }

nope方法实现了左右抖动。左右抖动的原理就是对view进行x轴的平移。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static ObjectAnimator nope(View view) {  
    int delta = view.getResources().getDimensionPixelOffset(R.dimen.spacing_medium);  
   
    PropertyValuesHolder pvhTranslateX = PropertyValuesHolder.ofKeyframe(View.TRANSLATION_X,  
            Keyframe.ofFloat(0f, 0),  
            Keyframe.ofFloat(.10f, -delta),  
            Keyframe.ofFloat(.26f, delta),  
            Keyframe.ofFloat(.42f, -delta),  
            Keyframe.ofFloat(.58f, delta),  
            Keyframe.ofFloat(.74f, -delta),  
            Keyframe.ofFloat(.90f, delta),  
            Keyframe.ofFloat(1f, 0f)  
    );  
   
    return ObjectAnimator.ofPropertyValuesHolder(view, pvhTranslateX).  
            setDuration(500);  }

GitHub demo地址

参考:

https://plus.google.com/+CyrilMottier/posts/FABaJhRMCuy  

http://developer.android.com/reference/android/animation/PropertyValuesHolder.html  

http://developer.android.com/guide/topics/graphics/prop-animation.html

Android中使用抖动动画吸引来用户注意的更多相关文章

  1. android中设置Animation 动画效果

    在 Android 中, Animation 动画效果的实现可以通过两种方式进行实现,一种是 tweened animation 渐变动画,另一种是 frame by frame animation ...

  2. Android设置View抖动动画

    在应用中,有时候我们要吸引用户去点击某些按钮,比如应用市场的推荐按钮,为了能够吸引用户主动点击而且不过分的打扰用户,最好的方法就是给我们想吸引用户注意的view添加一些抖动动画,比如这张图 这里我主要 ...

  3. Android中的帧动画与补间动画的使用

    前言 在日常开发中,我们有时候须要一些好看的动画效果,这时能够充分利用Android提供的这几种动画来实现. Android提供了3种类型的动画: 补间动画:补间动画能够应用于View,让你能够定义一 ...

  4. Android(java)学习笔记199:Android中补间动画(Tween Animation)

    本文主要简单介绍补间动画使用代码实现, 关于使用xml实现补间动画,可以参看:自定义控件三部曲之动画篇(一)——alpha.scale.translate.rotate.set的xml属性及用法 1. ...

  5. 在Android中显示GIF动画

    gif图动画在android中还是比较常用的,比如像新浪微博中,有很多gif图片,而且展示非常好,所以我也想弄一个.经过我多方的搜索资料和整理,终于弄出来了,其实github上有很多开源的gif的展示 ...

  6. 【转】[置顶] 在Android中显示GIF动画

    gif图动画在Android中还是比较常用的,比如像新浪微博中,有很多gif图片,而且展示非常好,所以我也想弄一个.经过我多方的搜索资料和整理,终于弄出来了,其实github上有很多开源的gif的展示 ...

  7. Android(java)学习笔记142:Android中补间动画(Tween Animation)

    本文主要简单介绍补间动画使用代码实现, 关于使用xml实现补间动画, 可以参看:自定义控件三部曲之动画篇(一)——alpha.scale.translate.rotate.set的xml属性及用法 1 ...

  8. Android中的布局动画

    简介 布局动画是给布局的动画,会影响到布局中子对象 使用方法 给布局添加动画效果: 先找到要设置的layout的id,然后创建布局动画,创建一个LayoutAnimationController,并把 ...

  9. Android 中如何使用动画

    1:首先在res/anim/文件夹下建立动画xml文件. 2:在java代码中对UI控件使用动画. //加载动画 Animation myAnim=AnimationUtils.loadAnimati ...

随机推荐

  1. [转]make: 警告:检测到时钟错误。您的创建可能是不完整的。

    转自http://blog.csdn.net/maopig/article/details/6599660 我在make的时候也出现了同样的问题,不过不是什么大问题,这个不影响编译结果 分析原因可能是 ...

  2. shell 和awk性能对比

    time for ((i=0;i<10000;i++)) do ((sum+=i)); done real    0m0.086suser    0m0.079ssys    0m0.007s ...

  3. 左倾堆(一)之 图文解析 和 C语言的实现

    概要 本章介绍左倾堆,它和二叉堆一样,都是堆结构中的一员.和以往一样,本文会先对左倾堆的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现:实现的语言虽不同,但是原理 ...

  4. web前端学习路线与书籍推荐

    什么是web前端? 在以前,通俗的讲是网页制作,在现在,哼哼,可以参考这篇文章 http://tieba.baidu.com/p/4817153404 那么如果高效优雅的学习web呢? 注:以下纯属个 ...

  5. notepad++ 各类插件学习记录

    js文件的规范格式排列: 插件里安装 jstools, 然后重启notepad++再去插件里面的jstool里面用jsformat就可以格式化排列不规则的js代码了 notepad++ 自动补全: 在 ...

  6. JS魔法堂:属性、特性,傻傻分不清楚

    一.前言 或许你和我一样都曾经被下面的代码所困扰 var el = document.getElementById('dummy'); el.hello = "test"; con ...

  7. 分析SIX锁和锁分区导致的死锁

    什么是SIX锁? 官方文档锁模式中说到: 意向排他共享 (SIX):保护针对层次结构中某些(而并非所有)低层资源请求或获取的共享锁以及针对某些(而并非所有)低层资源请求或获取的意向排他锁. 顶级资源允 ...

  8. "数学口袋精灵"bug(团队)

    团队名:MY-HR 成员: 学号 博客园 团队贡献分 丘惠敏(组长) 201406114203 http://www.cnblogs.com/qiuhuimin/ 5 郭明茵 201406114204 ...

  9. android sdk 镜像

    大连东软信息学院镜像服务器地址:- http://mirrors.neusoft.edu.cn 端口:80北京化工大学镜像服务器地址:- IPv4: http://ubuntu.buct.edu.cn ...

  10. C#开发的高性能EXCEL导入、导出工具DataPie(支持MSSQL、ORACLE、ACCESS,附源码下载地址)[转]

    转自:http://www.cnblogs.com/yfl8910/archive/2012/05/19/2509194.html 作为财务数据核算人员,面对大量的业务与财务数据,借助于传统的EXCE ...