1. 简介
从这节课开始我们就正式的开始我们的动画部分,其实在android中最常见的动画分为3种,帧动画、补间动画、属性动画。而这3种动画可以说在我们开发过程中是非常常见的,尤其是属性动画,在这里需要说明一点就是,其实绝大部分的动画都可以由属性动画来完成。这个东西算是我们先来埋下一个伏笔,我们会在接下来的几节课程当中来不断的去通过效果、通过示例代码去印证这样的一个观点,那么接下来我们就来看下这几种动画它的含义、它的效果展示等等的这样一些东西。
其实一般在项目开发的过程中,这些动画都是放在一起联合使用的,当然也有单个动画使用的,可能会比较少,具体的可以参照我写的58同城数据加载效果、常见多条目筛选效果,里边所涉及到的动画都是将补间动画、属性动画放在一起混合使用的。
2. 定义
2.1 帧动画
帧动画就是把一个完整的动画效果,分为多张图片,让其持续一张一张的去播放,比如小时候的动画片;
具体使用如下:
1>: 找一些图片放到drawable问价夹下;
2>: 在drawable文件夹下直接创建 anim.xml文件,从drawable中引入图片,然后设置duration时长,oneshot = true表示播放一次,oneshot= false表示循环播放;
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true" >
<item
android:drawable="@drawable/pop1"
android:duration="100"/>
<item
android:drawable="@drawable/pop2"
android:duration="100"/>
<item
android:drawable="@drawable/pop3"
android:duration="100"/>
<item
android:drawable="@drawable/pop4"
android:duration="100"/>
<item
android:drawable="@drawable/pop5"
android:duration="100"/>
</animation-list>
3>: findviewbyid找到咱们需要把帧动画设置的ImageView的控件;
4>: 通过资源文件 获取 AnimationDrawable实例对象;
5>: 把这个实例对象设置给ImageView的背景即可;
iv_frame = (ImageView) findViewById(R.id.iv_frame);
// 通过逐帧动画的资源文件获得AnimationDrawable示例
frameAnim=(AnimationDrawable) getResources().getDrawable(R.drawable.bullet_anim);
// 把AnimationDrawable设置为ImageView的背景
iv_frame.setBackgroundDrawable(frameAnim);
或者:
private AnimationDrawable animationDrawable;
img = (ImageView) findViewById(R.id.img);
img.setImageResource(R.drawable.anim_loading);
animationDrawable = ((AnimationDrawable) img.getDrawable());
animationDrawable.start();
2.2 补间动画
补间动画指的是平移(translate动画,即位移)、缩放(scale动画)、旋转(rotate动画)、渐变透明(Alpha),改变的是View的属性
2.3 属性动画 (ObjectAnimator)
其实像绝大部分的加载数据页面之前的动画效果基本都可以认为是属性动画,因为它们基本都可以使用属性动画来实现
可以参照写的58同城数据加载、常见多条目筛选
2.4 - 值动画(VauleAnimator )
有时候我们可能会有这样的需求,就是类似QQ消息拖拽的,把那个数字拖动到一定位置然后松开手,可以发现,那个贝塞尔曲线会有一个回弹的一个效果,那个效果就可以用值动画来实现。
可以参照 贝塞尔曲线 - 让所有的View都可拖动爆炸 中回弹的效果
2.5 视差动画(Parallax Scrolling视差滚动)
效果比如知乎首页的引导页:
这张图片是静态的,大家可能分析不出什么东西,我直接给大家来说下效果是怎样的:
手指往左边拖动,可以看到第一个ViewPager的上边的所有图片往左边平移,然后包括它上边的文字一会往左边平移,而且速率可能不太一样,这个是第一个ViewPager的,并且后边的几个ViewPager也会是同样的效果;
可以分析得知,视差动画主要体现在背景的渐变、及内容元素的滚动速率上边,可以给用户很好的视觉及操作上的体验。
可以参照 属性动画 - 酷狗音乐引导页demo
2.6 转场动画
转场动画其实在5.0之前就已经有了,在5.0之前使用的是overridingPendingTransition()来实现一些转场动画效果,不过5.0之后的这种效果更加炫酷,效果如下:
这个是第一张
点击第三张会直接往上边弹出这张页面
其实还有其他的一些动画,比如视差动画(Parallax Scrolling视差滚动)、转场动画等等的,那么下节课我们就正式的开始我们自定义view之仿58同城效果的实现。