1.java代码实现Animation动画
首先介绍4个动画类:
PS:一下出现的百分比数值 均化为数值 比如 100%=1 50%=0.5
// TODO Auto-generated method stub
// Alpha 透明度渐变效果 参1:起始的透明度 参2:执行之后的透明度 范围 1~0 1为不透明 0为完全透明
AlphaAnimation animation=new AlphaAnimation(fromAlpha, toAlpha);
// Scale 缩放动画效果
// 图片从横坐标从fromX缩放到toX,纵坐标从fromY缩放到toY(4个参数的数值为float类型,代表整个图像的百分比,比如fromX=1 toX=2 就是横向扩大1倍)
// 缩放的起始点的中心由pivotXvalue(指定横坐标上的点)和pivotYvalue(指定Y坐标上的点)决定 (也就是设定的两个点的交接点,这两个参数也为float,也是为百分比)
// 上面两个参数的值为百分比数,则必须指定一个参照物 pivotYType和pivotXType来指定参照物是本身还是父控件,此类提供常量RELATIVE_TO_SELF,RELATIVE_TO_PARENT提供
ScaleAnimation animation2=new ScaleAnimation(fromX, toX, fromY, toY, pivotXType, pivotXValue, pivotYType, pivotYValue);
// Transalte移动效果
// 从fromXvalue(X坐标 百分比)和fromYvalue(Y坐标 百分比)的坐标点,移动到toXvalue和toYvalue的坐标点
// 起始和最终的位置的参照物由参数值前面的Type参数决定 此类提供常量RELATIVE_TO_SELF,RELATIVE_TO_PARENT提供,
TranslateAnimation animation3=new TranslateAnimation(fromXType, fromXValue, toXType, toXValue, fromYType, fromYValue, toYType, toYValue);
// 从fromXdelta和fromYdelta做标点移动到 toXdelta和toYdelta的坐标点(非百分比数值)
TranslateAnimation animation=new TranslateAnimation(fromXDelta, toXDelta, fromYDelta, toYDelta)
// Rotate旋转效果
// fromDegress和toDegrees决定旋转角度,从fromDegress度旋转至toDegrees度 toDegrees为正则顺时针旋转,为负则逆时针旋转
// pivotXType, pivotXValue, pivotYType, pivotYValue决定旋转的中心点 pivotXvalue和pivotYValue两 个百分比数值决定点的位置参照物原理同上由pivotXType和pivotYType决定,但原点0,0 都为参照物的左上点
RotateAnimation animation4=new RotateAnimation(fromDegrees, toDegrees, pivotXType, pivotXValue, pivotYType, pivotYValue);
动画的通用属性:
animation.setDuration(1000);//设置动画播放时间 毫秒单位
animation.setFillAfter(true); //设置动画结束后是否回到原点,true为动画结束后不会回到原点,false会回到原点
animation.setStartOffset(1000); //懂话开始时间的偏移量 毫秒单位
animation.setRepeatCount(1);//设置动画的执行次数
animation.setInterpolator(i)//设置iterpolator下面介绍iterpolator
AnimationSet类:
此类类似于一个List,只不过里面装的是动画类,在此类上设置的各项属性会添加到其包含的每个动画上.
interpolator的解释
interpolator定义一个动画的变化率(the rate of change)。这使得基本的动画效果(alpha, scale, translate, rotate)得以加速,减速,重复等。
Interpolator 定义了动画的变化速度,可以实现匀速、正加速、负加速、无规则变加速等。Interpolator 是基类,封装了所有 Interpolator 的共同方法,它只有一个方法,即 getInterpolation (float input),该方法 maps a point on the timeline to a multiplier to be applied to the transformations of an animation。Android 提供了几个 Interpolator 子类,实现了不同的速度曲线,如下:
AccelerateDecelerateInterpolator | 在动画开始与介绍的地方速率改变比较慢,在中间的时候加速 |
AccelerateInterpolator | 在动画开始的地方速率改变比较慢,然后开始加速 |
CycleInterpolator | 动画循环播放特定的次数,速率改变沿着正弦曲线 |
DecelerateInterpolator | 在动画开始的地方速率改变比较慢,然后开始减速 |
LinearInterpolator | 在动画的以均匀的速率改变 |
使用XML文件来实现动画类的效果:
1.在res/anim下建立xml文件
2.设置动画:(转 http://www.cnblogs.com/feisky/archive/2010/01/11/1644482.html)
PS:以下pivot的设置有三种写法:
1. pivotX=50 绝对定位
2. pivotX=50% 相对于本身
3. pivot=50%p 相对于父窗口
属性[类型] | 功能 | 备注 |
Duration[long] | 属性为动画持续时间 | 时间以毫秒为单位 |
fillAfter [boolean] | 当设置为true ,该动画转化在动画结束后被应用 | |
fillBefore[boolean] | 当设置为true ,该动画转化在动画开始前被应用 | |
interpolator | 指定一个动画的插入器 | 有一些常见的插入器 accelerate_decelerate_interpolator 加速-减速 动画插入器 accelerate_interpolator 加速-动画插入器 decelerate_interpolator 减速- 动画插入器 其他的属于特定的动画效果 |
repeatCount[int] | 动画的重复次数 | |
RepeatMode[int] | 定义重复的行为 | 1:重新开始 2:plays backward |
startOffset[long] | 动画之间的时间间隔,从上次动画停多少时间开始执行下个动画 | |
zAdjustment[int] | 定义动画的Z Order的改变 | 0:保持Z Order不变 1:保持在最上层 -1:保持在最下层 |
表二 | ||
XML节点 | 功能说明 | |
alpha | 渐变透明度动画效果 | |
<alpha android:fromAlpha=”0.1″ android:toAlpha=”1.0″ android:duration=”3000″ /> | ||
fromAlpha | 属性为动画起始时透明度 | 0.0表示完全透明 duration为动画持续时间,ms单位 |
| 属性为动画结束时透明度 |
表三 | |||
scale | 渐变尺寸伸缩动画效果 | ||
<scale android:interpolator= “@android:anim/accelerate_decelerate_interpolator” android:fromXScale=”0.0″ android:toXScale=”1.4″ android:fromYScale=”0.0″ android:toYScale=”1.4″ android:pivotX=”50%” android:pivotY=”50%” android:fillAfter=”false” android:startOffset=“700” android:duration=”700″ android:repeatCount=”10″ /> | |||
fromXScale[float] fromYScale[float] | 为动画起始时,X、Y坐标上的伸缩尺寸 | 0.0表示收缩到没有 1.0表示正常无伸缩 值小于1.0表示收缩 值大于1.0表示放大 | |
toXScale [float] toYScale[float] | 为动画结束时,X、Y坐标上的伸缩尺寸 | ||
pivotX[float] pivotY[float] | 为动画相对于物件的X、Y坐标的开始位置 | 属性值说明:从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置 | |
表四 | |||
translate | 画面转换位置移动动画效果 | ||
<translate android:fromXDelta=”30″ android:toXDelta=”-80″ android:fromYDelta=”30″ android:toYDelta=”300″ android:duration=”2000″ /> | |||
fromXDelta toXDelta | 为动画、结束起始时 X坐标上的位置 | ||
fromYDelta toYDelta | 为动画、结束起始时 Y坐标上的位置 | ||
表五 | |||
rotate | 画面转移旋转动画效果 | ||
<rotate android:interpolator=”@android:anim/accelerate_decelerate_interpolator” android:fromDegrees=”0″ android:toDegrees=”+350″ android:pivotX=”50%” android:pivotY=”50%” android:duration=”3000″ /> | |||
fromDegrees | 为动画起始时物件的角度 | 说明 当角度为负数——表示逆时针旋转 当角度为正数——表示顺时针旋转 (负数from——to正数:顺时针旋转) (负数from——to负数:逆时针旋转) (正数from——to正数:顺时针旋转) (正数from——to负数:逆时针旋转) | |
toDegrees | 属性为动画结束时物件旋转的角度 可以大于360度 | ||
pivotX pivotY | 为动画相对于物件的X、Y坐标的开始位 | 说明:以上两个属性值 从0%-100%中取值 50%为物件的X或Y方向坐标上的中点位置 |
在java代码中使用:
Animation animation=AnimationUtils.loadAnimation(AnimationTestActivity.this, R.anim.anmiation);
image.startAnimation(animation); //当然也可以放入AnimationSet当中
LayoutAnimationController的使用
用于实现一个layout或者viewgroup(例如ListView) 下的所有控件的动画效果,比如可以实现listview中的每一项出现时的动画效果
使用XML方法
1.在res/anim下建立xml文件内容:
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:delay="30%"
android:animationOrder="reverse"
android:animation="@anim/具体显示的动画xml文件" />
android:delay 子类动画时间间隔 (延迟) 70% 也可以是一个浮点数 如“1.2”等
android:animationOrder="random" 子类的显示方式 random表示随机
android:animationOrder 的取值有
normal | 0 | 默认 |
reverse | 1 | 倒序 |
random | 2 | 随机 |
android:animation="@anim/slide_right" 表示空间所使用的动画效果文件
在主布局文件当中为layout或者viewgroup添加如下配置
android:layoutAnimation="@anim/xml文件名"
使用Java代码方法
// LayoutAnimationController controller=new LayoutAnimationController(animation); //参数为 animation动画类
// controller.setOrder(LayoutAnimationController.ORDER_NORMAL); //设置播放顺序 使用的是LayoutAnimationController
// controller.setDelay(0); //设置间隔时间
// (Layout).setLayoutAnimation(controller); //为Layout或者listview设置layoutanimationController对象
AnimationListener介绍 Animation animation=AnimationUtils.loadAnimation(AnimationTestActivity.this, R.anim.anmiation);//加载animation
animation.setAnimationListener(new AnimationListener() {
//动画开始时执行
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
}
//动画重复时执行
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
//动画结束时执行
@Override
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
}
});