原文: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. Winform快速开发组件的实现(一)

    好久好久没有露面了,呵呵,对于写文章都有点生疏了. 在拿到任何一个项目,不管是b/s的还是c/s,我不会立即开始写代码,我一般会为使这些项目能够快速开发制定一系列的支持组件,虽然可能前期会付出一些代价 ...

  2. IOS APP上下黑边问题

    网上的一种是一个问题, 更换launchImage 后 APP在iPhone5下出现黑边. 原因是:我将Jpg(640*1136)的图片 强制改为Png(640*1136),导致APP出现黑边.

  3. android 中targetSdkVersion和与target属性的区别

    AndroidMenifest.xml中targetSdkVersion和project.properties中的target属性的区别      在AndroidMenifest.xml中,常常会有 ...

  4. Java Job

    1.在META-INF\MANIFEST.MF中指定Main-Class Main-Class: test.HelloWorld 命令:java -jar fileName.jar 2.不指定Main ...

  5. java模拟一个简单的QQ

    v 项目源码 https://github.com/hjzgg/java_QQ v 标题效果       package testFour; import java.awt.Color; import ...

  6. java中子类与父类中隐含的this引用的分析

    /* 看一下下面的程序,看是否你的答案和运行的答案是否一致! */ class Parent{ public int x; public Parent p; public Parent(){} pub ...

  7. datatables.js 简单使用--多选框和服务器端分页

    说明:datatables是一款jQuery表格插件.感觉EasyUI的datagrid更易用 内容:多选框和服务器端分页 缘由:写这篇博客的原因是datatables的文档写的不怎么样,找东西很麻烦 ...

  8. windows dos命令窗口的环境变量

    今天安装maven的时候遇到mvn -v显示mvn不是命令行,环境变量maven_home和path路径都配置了. 首先查看windows下的环境变量: >set maven_home MAVE ...

  9. ASP.NET HTTP模拟提交通用类 GET POST

     用法: WebRequestSugar ws = new WebRequestSugar(); //可选参数 //ws.SetAccept //ws.SetContentType //ws.SetC ...

  10. 开源一个基于天天团购的团购app

    可能大家都知道天天团购开源系统,一个做团购的开源项目很赞,前些日子做了基于天天团购系统做的团购客户端和移动端服务器!源代码放出,有了解的可以看看,希望收益! 先说服务器:app的服务器,基于天天团购的 ...