原文链接:点击打开链接
=============================================================================================
Android中提供了4中动画:
AlphaAnimation 透明度动画
ScaleAnimation 缩放动画
TranslateAnimation 位移动画
RotateAnimation 旋转动画
因为这次有使用到TranslateAnimation,所以这次先讲TranslateAnimation。
android.view.animation
类 TranslateAnimation
java.lang.Object android.view.animation.Animation
android.view.animation.TranslateAnimation
所有已实现的接口: Cloneable
字段
从类 android.view.animation.Animation 继承的字段
ABSOLUTE | 构造中的参数,绝对坐标 |
INFINITE | setRepeatCount(int)的传入参数,值为-1 即是无限次的 |
RELATIVE_TO_PARENT | 构造中的参数,相对于父控件身的坐标 |
RELATIVE_TO_SELF | 构造中的参数,相对于自身的坐标 |
RESTART | setRepeatMode(int)的传入参数,如果有重复的话,重新播放 |
REVERSE | setRepeatMode(int)的传入参数,如果有重复的话,反向播放 |
START_ON_FIRST_FRAME | setStartTime(long startTimeMillis)的传入参数,在第一次调用getTransformation启动动画 |
ZORDER_BOTTOM | setAnimation()的参数,在动画播放期间,强制把当前播放的内容放到其他内容之下 |
ZORDER_NORMAL | setAnimation()的参数,正在播放的动画内容保持当前的Z轴顺序 |
ZORDER_TOP | setAnimation()的参数,在动画播放期间,强制把当前播放的内容放到其他内容的上面 |
构造方法
TranslateAnimation(Context context, AttributeSet attrs)
Constructor used when a TranslateAnimation is loaded from a resource.
TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
Constructor to use when building a TranslateAnimation from code
TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue)
Constructor to use when building a TranslateAnimation from code
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
我们比较常用的是后面两个构造方法,现在我们来分析下构造方法
TranslateAnimation(Context context, AttributeSet attrs) 继承的构造
- 参数context: 上下文环境
- 参数attrs:自定义属性
- 构造用途:从XML中构建TranslateAnimation
TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
- 参数fromXDelta:位置变化的起始点X坐标。
- 参数toXDelta:位置变化的结束点X坐标。
- 参数fromYDelta:位置变化的起始点Y坐标。
- 参数toYDelta:位置变化的结束点Y坐标。
- 构造用途:定义一个从起始坐标XY开始到 结束点XY的 TranslateAnimation
TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue)
- 参数fromXType:开始时x轴相对于组件的位置类型。
- 参数fromXValue:开始时x轴的坐标。根据fromXType代表不同的意义。
- 参数toXType:结束时x轴相对于组件的位置类型。
- 参数toXValue:结束时x轴的坐标。根据toXType代表不同的意义。
- 参数fromYType:开始时y轴相对于组件的位置类型。
- 参数fromYValue:开始时y轴的坐标。根据fromYType代表不同的意义。
- 参数toYType:结束时y轴相对于组件的位置类型。
- 参数toYValue:结束时y轴的坐标。根据toYType代表不同的意义。
- 构造用途:相比第二的构造,这个构造更加自定义,不在是固定的位置属性
方法
从类 android.view.animation.Animation 继承的公有方法
- void cancel()
- 作用:取消这个动画
- long computeDurationHint()
- 返回值:计算一个动画的持续时间,返回一个以毫秒为单位的数据
- int getBackgroundColor()
- 返回值:这个动画的背景颜色
- boolean getDetachWallpaper()
- 返回值: 这个动画是否脱离壁纸运行的boolean值
- long getDuration()
- 返回值:这个动画应该持续的时间
- boolean getFillAfter()
- 返回值: 这个动画结束时画面是否停留在最后一帧 的boolean值
- boolean fillBefore()
- 返回值: 这个动画结束时画面是否停留在第一帧 的boolean值
- Interpolator getInterpolator()
- 返回值: 此动画的插值器类型
- int getRepeatCount()
- 返回值: 动画要重复多少次
- int getRepeatMode()
- 返回值:动画要重复的模式,例如重新开始,反向开始
- long getStartOffset()
- 返回值:这个动画在调用start方法后延迟了多久才启动
- long getStartTime()
- 返回值:这个动画调用start方法的时间
- boolean getTransformation(long currentTime, Transformation outTransformation, float scale)
- 参数currentTime:传入某个动画时间
- 参数outTransformation:获取传入时间点的变形的原始数据对象
- 参数scale:缩放比例
- 返回值:如果当前这个动画时间动画还在运行则返回true
- boolean getTransformation(long currentTime, Transformation outTransformation)
- 参数currentTime:传入某个动画时间
- 参数outTransformation:获取传入时间点的变形的原始数据对象
- 返回值:如果当前这个动画时间动画还在运行则返回true
- int getZAdjustment()
- 返回值:Animation在Z轴方向的顺序
- boolean hasEnded()
- 返回值:动画是否已经结束
- boolean hasStarted()
- 返回值:动画是否已经开始
- void initialize(int width, int height, int parentWidth, int parentHeight)
- 参数width:动画对象的宽
- 参数height:动画对象的高
- 参数parentWidth:父控件的宽
- 参数parentWidth:父控件的高
- 作用:初始化动画对象以及父控件尺寸。
- boolean isFillEnabled()
- 返回值:当前动画的使能填充属性。当该属性为true时,将执行setFillBefore和setFillAfter方法,否则将忽略setFillBefore和setFillAfter方法。
- boolean isInitialized()
- 返回值:如果动画已经初始化 则返回true
- void reset()
- 作用:重置动画到初始化状态
- void restrictDuration (long durationMillis)
- 参数durationMillis:最大允许动画持续时间
- 作用:调整动画持续时间,确保了重复执行,也不会持续的比给定的时间更长。
- void scaleCurrentDuration (float scale)
- 参数scale:缩放比例
- 作用:按一定的比例放大持续时间
- void setAnimationListener(Animation.AnimationListener listener)
- 参数listener:动画监听
- 作用:给一个动画设置监听,设置类似侦听动画的开始或动画重复的通知
- void setBackgroundColor(int bg)
- 参数bg:Color的int值
- 作用:设置动画的背景颜色
- void setDetachWallpaper(boolean detachWallpaper)
- 参数detachWallpaper:是否脱离壁纸运行动画
- 作用:如果为true,这个动画将会脱离背景运行,首先你要有个背景
- void setDuration(long durationMillis)
- 参数durationMillis:动画的持续时间
- 作用:设置一个动画的持续时间
- void setFillAfter(boolean fillAfter)
- 参数fillAfter:动画是否停留在最后一帧
- 作用:设置动画是否停留在最后一帧,为true则是停留在最后一帧
- void setFillBefore(boolean fillBefore)
- 参数fillBefore:动画是否停留在第一帧
- 作用:设置动画是否停留在第一帧,为true则是停留在第一帧
- void setFillEnabled(boolean fillEnabled)
- 参数fillEnabled:动画是否使能填充
- 作用:设置动画是否使能填充,为true将执行setFillBefore和setFillAfter方法,否则将忽略setFillBefore和setFillAfter方法。
- void setInterpolator(Context context, int resID)
- 参数context:上下文环境
- 参数resID:插值器R ID
- 作用:设置动画插值器属性,使用XML设置
- void setInterpolator(Interpolator i)
- 参数i:插值器
- 作用:设置动画插值器属性,使用代码设置
- void setRepeatCount(int repeatCount)
- 参数repeatCount:重复次数
- 作用:设置动画重复次数
- void setRepeatMode(int repeatMode)
- 参数repeatMode:重复类型,例如 重头开始,反向开始
- 作用:设置动画重复时候的模式
- void setStartOffset(long startOffset)
- 参数startOffset:延迟时间
- 作用:当调用start方法后延迟一定时间开始
- void setStartTime(long startTimeMillis)
- 参数startTimeMillis:动画开始时间
- 作用:在特定的时间调用start方法
- void setZAdjustment(int zAdjustment)
- 参数zAdjustment:Z轴方向的顺序(TOP,NORMAL,BOTTOM)
- 作用:调整播放内容在Z轴方向的顺序
- void start()
- 作用:第一次执行getTransformation方法的时候才会执行动画
- void startNow()
- 作用:执行动画的主要方法,使用时需要先通过setAnimation方法为某一个View对象设置动画.
- boolean willChangeBounds()
- 返回值:判断动画是否会改变视图的边界,ture为会改变
- boolean willChangeTransformationMatrix ()
- 返回值:判断动画是否会改变移动变换的矩阵,ture为会改变
从类 android.view.animation.Animation 继承的受保护的方法
以下方法不可以被调用使用,只是简单说明下是什么
- void applyTransformation(float interpolatedTime, Transformation t)
- 参数interpolatedTime:动画进度时间值,取值范围在[0.0f-1.0f]
- 参数t:动画某一帧中变形的原始数据
- 作用:在自定义动画类的时候都要重写这个方法,主要作用是把一些属性组装成一个Transformation类,这个方法会被父类的getTransformation方法调用
- Animation clone ()
- 返回值:此动画对象的副本
- void ensureInterpolator ()
- 作用:这个动画有一个插值器
- void finalize ()
- 作用:垃圾回收器要回收对象的时候,首先要调用这个类的finalize方法
- float getScaleFactor ()
- 作用:返回每个类在动画中的缩放比例因子
- float resolveSize (int type, float value, int size, int parentSize)
- 参数type:动画坐标的类型
- 参数value:动画坐标的值
- 参数size:动画对象的大小
- 参数parentSize:动画对象的父对象的大小
- 返回值:返回动画的尺寸
举一个栗子
public class firstActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) { //重载onCreate方法
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ImageView image=(ImageView)findViewById(R.id.imageView1); //ImageView对象
Button btn1=(Button)findViewById(R.id.button1); //按钮对象
Button btn2=(Button)findViewById(R.id.button2);
final Animation translateAnimation=new TranslateAnimation(0,300,0,300); //位置变化动画效果
btn1.setOnClickListener(new View.OnClickListener() { //设置监听器
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
translateAnimation.setDuration(3000); //设置动画持续时间
translateAnimation.setRepeatCount(2); //设置重复次数
translateAnimation.setRepeatMode(Animation.REVERSE); //反方向执行
image.setAnimation(translateAnimation); //设置动画效果
translateAnimation.startNow(); //启动动画
}
});
btn2.setOnClickListener(new View.OnClickListener() { //设置监听器
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
translateAnimation.cancel(); //取消动画执行
}
});
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
在这段代码中,首先通过TranslateAnimation构造方法创建了一个位置变化的动画对象。然后,在第一个按钮监听器中设置了动画的持续时间、重复次数和重复模式等,然后启动该动画。在第二个按钮监听器中取消该动画。读者运行这段代码