1.概述
android提供了几种动画类型:Tween(补间)动画和ViewAnimation、Drawable(帧)动画、Property(属性)动画、LayoutAnimation(布局动画)。其中Property动画是在Android3.0(API 11)及以上版本可用,也是Android推荐使用。一般的动画的使用方式都有两种,xml与Java代码实现。以下也是分别对着这两种方式进行说明
2.Tween动画
Tween动画体系结构介绍
package:android.view.animation
抽象类Animation:类名 说明 AlphaAnimation 渐变透明动画效果 RotateAnimation 旋转动画效果 ScaleAnimation 伸缩动画效果 TranslateAnimation 位置移动动画效果 AnimationSet 动画容器 Interfaces:
接口名 说明 Animation.AnimationListener onAnimationEnd();onAnimationRepeat();onAnimationStart(); Interpolator 插值器 Tween动画的使用
Tween各个动画属性
Animation属性:xml属性 java方法 解释 android:detachWallpaper setDetachWallpaper(boolean) 是否在壁纸上运行 android:duration setDuration(long) 动画持续的时间 android:fillAfter setFillAfter(boolean) 动画结束时是否保持在动画最后的状态 android:fillBefore setFillBefore(boolean) 动画结束时是否还原到初始状态 android:fillEnabled setFillEnabled(boolean) 以上一个相同 android:interpolator setInterpolator(interpolator) 设置插值器 android:repeatCount setRepeatCount(int) 重复次数 android:repeatMode setRepeatMode(int) 重复类型reverse android:startOffset setStartOffset(long) 调用start函数之后等待多久开始 android:zAdjustment setZAdjustment(int) 动画的z轴位置top/bottom/normal Alpha动画属性:
xml属性 java方法 解释 android:fromAlpha AlphaAnimation(float fromAlpha,…) 动画开始的透明度0.0是全透明,1.0是不透明 android:toAlpha AlphaAnimation(…,float toAlpha) 动画结束的透明度,同上 Rotate动画属性:
xml属性 java方法 解释 android:fromDegrees RotateAnimation(float fromDegrees,…) 旋转开始的角度,正代表顺时针度数 android:toDegrees RotateAnimation(…,float toDegrees) 旋转结束的角度,同上 android:pivotX RotateAnimation(…,float pivotX,…) 旋转起点X坐标@ android:pivotY RotateAnimation(…,float pivotY) 旋转起点Y坐标 ,同上 @:表示数值、百分数,如30表示以当前View左上角坐标加30px为初始点、30%表示以View宽高的30%作为初始点、30%p表示以当前View的左上角加上父控件宽高的30%作为初始点。
Scale动画属性:xml属性 java方法 解释 android:fromXScale ScaleAnimation(float fromX,…) 初始X轴缩放比例,1.0表示无变化 android:toXScale ScaleAnimation(…,float toX,…) 结束X轴缩放比例 android:fromYScale ScaleAnimation(…,float fromY,…) 初始Y轴缩放比例 android:toYScale ScaleAnimation(…,float toY,…) 结束Y轴缩放比例 android:pivotX ScaleAnimation(…,float pivotX,…) 缩放起点X坐标@ android:pivotY ScaleAnimation(…,float pivotY) 缩放起点Y坐标 ,同上 Translate动画属性:
xml属性 java方法 解释 android:fromXDelta TranslateAnimation(float fromDelta,…) 起始点X轴坐标,@ android:fromYDelta TranslateAnimation(…,float fromDelta,…) 起始点Y轴坐标,@ android:toXDelta TranslateAnimation(…,float toDelta,…) 结束X轴坐标 android:toYDelta TranslateAnimation(…,float toDelta) 结束Y轴坐标 Tween动画使用方式
xml方式:放置在”res/anim/”目录下(如:example.xml)
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="+360"
android:duration="3000"/>
然后在java代码中运用
ImageView image = (ImageView) findViewById(R.id.image);
Animation testAnim = AnimationUtils.loadAnimation(this, R.anim.example);
image.startAnimation(testAnim);
java方式:
//这里的0.5f就是上面提到的**@**的注释
Animation anim = new RotateAnimation(0,360, Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0.5f);
//表示线性插值器 后续有详细说明
LinearInterpolator lir = new LinearInterpolator();
anim.setInterpolator(lir);
anim.setDuration(1000);
image.startAnimation(anim);
注意点:Tween动画执行后并未改变View的真实布局属性值。
Tween动画:是通过 ParentView 来不断调整 ChildView 的画布坐标系来实现的。如果以上这几种动画都不能够满足需求则可以自定义动漫,重写Animation:applyTransformation(float interpolatedTime, Transformation t);的方法。其中interpolatedTime表示0-1之间的数值变化,Transformation表示动画在不同时刻对图形或组件的变形程度,该对象封装了两个可变的值mMatrix,mAlpha。为了能控制图片或View进行三维变化,android提供了android.graphics.Camera;类
- Tween动画举例
待续