今天重新看了看有关动画的知识。
常用动画:
1.视图动画(包括:Tween动画(也叫补间动画) 和 帧动画两种)
补间动画:
补间动画主要是对View对象设置动画效果,仅仅是改变了视觉效果,并没有改变View的属性。最明显的一个现象就是:对View实现了平移动画效果之后,点击事件还是在View原来的位置才能响应。
AlphaAnimation 透明度动画
ScaleAnimation 缩放动画
TranslateAnimation 平移动画
RotateAnimation 旋转动画
补间动画的使用都有xml 和 java代码两种方式。
选择ScaleAnimation来看看具体使用方法
方式一:
scale.xml
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fromXScale="1"
android:fromYScale="1"
android:pivotX="0"
android:pivotY="0"
android:toXScale="2"
android:toYScale="2">
</scale>
在Activity中使用
Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.scale);
tv_count.startAnimation(animation);//开始动画
注:
android:fromXScale:动画开始时,控件在水平方向相对于自己的缩放比例,浮点值。
android:fromYScale:动画开始时,控件在垂直方向相对于自己的缩放比例,浮点值。
android:toXScale:动画结束时,控件在水平方向相对于自己的缩放比例,浮点值。
android:toYScale:动画结束时,控件在垂直方向相当于自己的缩放比例,浮点值。
android:pivotX:缩放中心点X轴坐标,它的值有三种方式:数值,百分数,百分数p,例如50, 50%, 50%p。
android:pivotY:缩放中心点Y轴坐标,值同上。
默认情况下坐标原点位于控件左上角,向右(X轴正方向)向下(Y轴正方向)
50:表示在当前控件的左上角,即原点处X轴、Y轴分别加上50px,作为缩放中心点。
50%:表示在当前控件的左上角,即原点处x轴、y轴分别加上控件自身宽高的50%,作为缩放中心点。
50%p:表示在当前控件的左上角,即原点处x轴、y轴分别加上父控件宽高的50%,作为缩放中心点。
方式二:
ScaleAnimation类的构造函数如下:
1.public ScaleAnimation(Context context, AttributeSet attrs)
2.public ScaleAnimation(float fromX, float toX, float fromY, float toY)
3.public ScaleAnimation(float fromX, float toX, float fromY, float toY,float pivotX, float pivotY)
4.public ScaleAnimation(float fromX, float toX, float fromY, float toY,int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
使用第四种构造方法
ScaleAnimation animation = new ScaleAnimation(1f, 2f, 1f, 2f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
animation.setDuration(3000);
tv_count.startAnimation(animation);
注:
pivotXType 和 pivotYType 也分别有三种,对应上面xml中的类似50, 50%, 50%p。
Animation.ABSOLUTE:对应于上面xml中的50
Animation.RELATIVE_TO_SELF:对应于上面xml中的50%
Animation.RELATIVE_TO_PARENT:对应于上面xml中的50%p
其他三种动画用法类似,不再赘述。
帧动画
就是把多张静态图片放在一起,通过控制让其一帧一帧的显示,就跟放电影一样。
要实现帧动画,需要用到AnimationDrawable。
2.属性动画
可以对任何对象的属性做动画,而不仅仅是View,甚至可以没有对象。而且,属性动画的效果要比视图动画更丰富,更容易使用。
属性动画原理:属性动画要求作用对象(如View)提供该属性(如View的scaleX属性)的getter、setter方法。属性动画根据作用对象那个的属性的起点值、终点值、TypeEvaluator 在动画过程中根据插值器(Interpolator)计算当前时间对应的值,然后作用到相应的属性上从而使作用对象发生相应的改变。
主要用到:ValueAnimator 和 ObjectAnimator。
插值器(Interpolator):决定 值 的变化模式(匀速,加速等)
估值器(TypeEvaluator):决定 值 的具体变化逻辑
ValueAnimator类是先改变值,然后手动赋值给对象的属性从而实现动画,是间接对对象属性进行操作;
ObjectAnimator类是先改变值,然后自动赋值给对象的属性从而实现动画,是直接对对象属性进行操作;
3.转场动画
顾名思义,场景改变时的动画。通常指Activity切换时的动画效果。一般的,使用 overridePendingTransition 方法就可以满足我们的需求了,而android 5.0推出了全新的转场动画,动画效果更加丰富了。
全新的转场动画总体上分为两种:一种是分解、滑动、淡入淡出,另一种就是共享元素动画。