原文: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. 【cs229-Lecture19】微分动态规划

    内容: 调试强化学习算法(RL算法) LQR线性二次型调节(french动态规划算法) 滤波(kalman filters) 线性二次高斯控制(LGG) Kalman滤波器 卡尔曼滤波(Kalman ...

  2. 如何将ToolBar 样式设置Title文字水平居中

    以下是我的activity.xml的代码,线性布局.<android.support.v7.widget.Toolbar         android:id="@+id/toolba ...

  3. oc调用rest api

    无需其他类库 1: - (IBAction)callapi:(id)sender { 2: NSURL *url=[NSURL URLWithString:@"http://..." ...

  4. 队列的图文解析 和 对应3种语言的实现(C/C++/Java)

    概要 本章和介绍"栈"时的流程一样,先对队列进行介绍,然后分别给出队列的C.C++和Java三种语言的实现.内容包括:1. 队列的介绍2. 队列的C实现3. 队列的C++实现4.  ...

  5. [Design Patterns] 2. Design principle

    Single Responsibility Principle 类的设计趋向于:Use Case Diagram --> (derived) --> Detail Open-Closed ...

  6. WebGL 3D on iOS8 正式版

    今天iOS8终于正式发布了,升级了手头设备后对我来说最重要的就是测试WebGL的3D是否真的能跑苹果的系统了,跑了多个HT for Web的3D例子都非常流畅,比Android刚支持WebGL时好太多 ...

  7. UIApplication和delegate代理

    所有的移动操作系统都有个致命的缺点:app很容易受到打扰,比如一个来电或者锁屏都会导致app进入后台甚至被终止 还有很多其他类似的情况会导致app受到干扰,在app受到干扰时,会产生一些系统事件,这是 ...

  8. 对Mathsapp的测试以及找bug

    组员博客地址: 练思明 卓嘉炜:http://www.cnblogs.com/luoliuxi/ 何宇明:http://www.cnblogs.com/40heyuming/ 团队贡献分: 练思明:2 ...

  9. 【原创随笔】Sql2008 R2 做CQRS小结

    1.做数据同步,订阅服务器只要把数据库建好就可以了,至于表和存储过程以及其它的都不管,订阅的时候会自动创建这些信息. 2.选择事务发布(如果同步表,表至少要带主键,不然不能选择) 3.在发布的时候,用 ...

  10. SQL Server 2008 评估期已过解决方法

    SQL Server 2008有180天的试用期,过期后会提示“评估期已过”的提示. 1.进入SQL Server安装中心: 2.选择“维护”-“版本升级” 3.输入密钥: 其他的根据提示操作. 附S ...