说起动画,其实一点也不陌生,在使用一款app的时候为了优化用户体验,多多少少的,都会加入动画。

安卓中的动画,分为两大类:补间动画和属性动画。本篇博文会详细介绍总结这两大动画,希望本篇博文对你的学习和生活有所帮助。

**补间动画**

补间动画分为四类:平移动画,旋转动画,缩放动画和渐变动画。这几类动画用法都差不多,只是对象参数不同这里我统一展示出来。以下是效果图:

实现代码很简单:

       btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//平移动画
TranslateAnimation translate=new TranslateAnimation(Animation.RELATIVE_TO_SELF,300,
Animation.RELATIVE_TO_SELF,300);
translate.setDuration(3000);
translate.setFillAfter(true);
img.startAnimation(translate);
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//旋转动画
RotateAnimation rotate=new RotateAnimation(0,360, Animation.RELATIVE_TO_SELF,0.5f,
Animation.RELATIVE_TO_SELF,0.5f);
rotate.setFillAfter(true);
rotate.setDuration(3000);
img.startAnimation(rotate);
}
});
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//缩放动画
ScaleAnimation scale=new ScaleAnimation(0,2,0,2,Animation.RELATIVE_TO_SELF,0.5f,
Animation.RELATIVE_TO_SELF,0.5f);
scale.setDuration(3000);
img.startAnimation(scale);
}
});
btn4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//渐变动画
AlphaAnimation alpha =new AlphaAnimation(0,1);
alpha.setDuration(3000);
img.startAnimation(alpha);
}
});

总结以下:

AlphaAnimation:渐变动画,0.0f完全透明,1.0f完全显示。

RotateAnimation:旋转动画。起始角度,结束角度,相对值,横坐标的比例,相对值,纵坐标的比例。(结束角度为正就为顺时针,负数为逆时针)

ScaleAnimation:比例动画,x的位置比例起始,x的位置比例结束,y的位置比例起始,y的位置比例结束,x的锚点,x的参数,y的锚点,y的参数

setDuration:设置动画播放时间。
setFillAfter(true):界面停留在动画结束的状态·而不是初始化状态。
 除此之外我们还可以将这几个动画效果组合起来,实现组合动画。
效果图:
代码也是简单易懂:
 AnimationSet animationSet=new AnimationSet(false);
TranslateAnimation translate=new TranslateAnimation(Animation.RELATIVE_TO_SELF,300,
Animation.RELATIVE_TO_SELF,300);
translate.setDuration(3000);
translate.setFillAfter(true);
animationSet.addAnimation(translate);
RotateAnimation rotate=new RotateAnimation(0,360, Animation.RELATIVE_TO_SELF,0.5f,
Animation.RELATIVE_TO_SELF,0.5f);
rotate.setFillAfter(true);
rotate.setDuration(3000);
animationSet.addAnimation(rotate);
ScaleAnimation scale=new ScaleAnimation(0,2,0,2,Animation.RELATIVE_TO_SELF,0.5f,
Animation.RELATIVE_TO_SELF,0.5f);
scale.setDuration(3000);
animationSet.addAnimation(scale);
AlphaAnimation alpha =new AlphaAnimation(0,1);
alpha.setDuration(3000);
animationSet.addAnimation(alpha);
img.startAnimation(animationSet);

AnimationSet通过addAnimation()方法,可以将动画结合起来,实现更多的动画效果。

**属性动画**

早起的补间动画是没有改变view的参数的,view在刷新的时候会变回原来的样子。所以,在安卓3.0之后,谷歌推出了属性动画。

而属性动画的实质就是通过例如:translationX,translationY,scaleX,scaleY,rotationX,rotationY等等,这些新增的属性,记录View的值

从而使View的动画可以得到保存,刷新后不会消失。

下面是一个简单例子,通过属性动画改变x上的缩放值:

接下来是实现代码:

  btn6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ObjectAnimator objectAnimator= ObjectAnimator.ofFloat(img,"scaleX",0.5f);
objectAnimator.setDuration(3000);
objectAnimator.setStartDelay(1000);
objectAnimator.start();
}
});

如果这样实现,其实是有很多弊端的。因为,属性动画只有在3.0的版本之后能用,版本过低,是没法使用的。并且,实现一个属性动画,参数也过于繁琐。所以,这里推荐

使用开源框架:nineoldandroids。

如果你使用的是Android studio 在gradle中加入:dependencies {
compile 'com.nineoldandroids:library:2.4.0'
}

使用这个开源框架,不但能在低版本中使用属性动画,而且,实现更为简单更加方便。

   btn6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//NIneOldAndroid中的一个类实现
ViewPropertyAnimator
.animate(img)
.scaleX(0.5f)
.setInterpolator(new OvershootInterpolator())//超过一点回来
.setDuration(3000)
.start();
}
});

一个简单的例子:

怎么样,是不是更加好看了?

代码也是非常简单:

  ViewPropertyAnimator
.animate(img)
.translationY(600)
.setInterpolator(new BounceInterpolator())//弹性掉落
.setDuration(1500)
.start();

还可以这样:

代码:

      ViewPropertyAnimator
.animate(img)
.translationX(40)
.setInterpolator(new CycleInterpolator(6))//左右来回抖动
.setDuration(1500)
.start();

好了,关于动画就介绍到这里,如果懂得了基本方法,如何酷炫的动画都可以通过自己组合起来,如果本篇博文有什么写的不对的地方,欢迎留言,互相探讨,最后,希望

你通过这篇博文对你的学生和生活有所帮助。

 
 

Android开发实战之补间动画和属性动画的更多相关文章

  1. Android开发UI之补间动画-Tween Animation

    Tween Animation-补间动画 官网链接-http://developer.android.com/reference/android/view/animation/Animation.ht ...

  2. Android开发UI之补间动画-布局添加动画

    布局添加动画 使用步骤: 1.获取到布局的id RelativeLayout ly=(RelativeLayout)findViewById(R.id.layout); 2.设置动画样式 ScaleA ...

  3. Android中四种补间动画的使用示例(附代码下载)

    场景 Android中四种补间动画. 透明度渐变动画 旋转动画 缩放动画 平移动画 注: 博客: https://blog.csdn.net/badao_liumang_qizhi关注公众号 霸道的程 ...

  4. 我的 Android 开发实战经验总结

    我的 Android 开发实战经验总结 字数4440 阅读5137 评论43 喜欢250 曾经一直想写一篇总结 Android 开发经验的文章,预计当时的我还达不到某种水平,所以思路跟不上,下笔又捉襟 ...

  5. android104 帧动画,补间动画,属性动画

    ##帧动画FrameAnimation* 多张图片快速切换,形成动画效果* 帧动画使用xml定义 package com.itheima.frameanimation; import android. ...

  6. Android开发——View动画、帧动画和属性动画详解

    0. 前言   Android动画是面试的时候经常被问到的话题.我们都知道Android动画分为三类:View动画.帧动画和属性动画. 先对这三种动画做一个概述: View动画是一种渐进式动画,通过图 ...

  7. Xamarin Android开发实战(上册)大学霸内部资料

    Xamarin Android开发实战(上册)大学霸内部资料   试读文档下载地址:http://pan.baidu.com/s/1jGEHhhO 密码:vcfm 介绍: 本教程是国内唯一的Xamar ...

  8. Android开发实战(申明:来源于网络)

    Android开发实战(申明:来源于网络) 地址:http://so.csdn.net/so/search/s.do?q=Android%E5%BC%80%E5%8F%91%E5%AE%9E%E6%8 ...

  9. 阅读《名师讲坛--Android开发实战经典》

    一,专心,快速阅读一本书,直到深入理解,把书读厚,再读薄,你定会有收获. 二,20171214开始阅读<名师讲坛--Android开发实战经典>,但愿自己有所收获.从今天开始养成刻录学习写 ...

随机推荐

  1. PEP

    用python ,  PEP难以绕过.  PEP是什么?   Python Enhancement Proposals , 它集合了python的改进提案. 它不是版本递进的, 有些PEP是应该去读一 ...

  2. 几个开源ssg 技术方案

    1. Nanoc    2. Middle Man App   3. Hexo   4. DocPad   5. Hugo   6. Jekyll   7. Octopress   8. Harp   ...

  3. Spring Cloud feign 服务超时处理

    Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题 造成该问题的原因 Hystrix默认的超时时间是1秒,如果超过这个时间尚未响应,将会进入fa ...

  4. 关于1024:堆栈下溢的错误(1024. Stack Underflow Occurred)

    http://blog.163.com/sylar_lin/blog/static/192332093201111242412487/ 今天碰到个很奇怪的问题,注释掉下面的trace,realse版本 ...

  5. ruby关于require路径

    ruby里面的require说明 require './aaaa' 这种方式,包含的是系统路径 相对路径得用下面的 require_relative "./xxxx" 或者使用这个 ...

  6. ElasticSearch读取查询结果(search)

    本文转载自:http://blog.csdn.net/wangxiaotongfan/article/details/46531729?locationNum=6 在es中所有的查询结果都会保存在Se ...

  7. python 数组的操作--统计某个元素在列表中出现的次数

    list.count(obj)  统计某个元素在列表中出现的次数例子: aList = [123, 'xyz', 'zara', 'abc', 123]; print "Count for ...

  8. 让输入的字符转义成html实体的方法

    使用 htmlspecialchars() 函数,代码不会执行,因为会被保存为转义代码 总结测试方法: https://www.cnblogs.com/kaibindirver/p/10321448. ...

  9. IT运维的定义

      IT运维是IT管理的核心和重点部分,也是内容最多.最繁杂的部分,该阶段主要用于IT部门内部日常运营管理,涉及的对象分成两大部分,即IT业务系统和运维人员,该阶段的管理内容又可细分为七个子系统:   ...

  10. 第十章 Secret & Configmap (中)

    10.3 在Pod中使用Secret 10.3.1 Volume方式 apiVersion: v1 kind: Pod metaata: name: mypod spec: containers: - ...