从字面上理解,就是一帧挨着一帧播放图片,有点类型电影。可以用xml代码或者java代码实现。
1、xml代码实现
<animation-list
android:oneshot="false"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@mipmap/image1"
android:duration="100">item>
<item
android:drawable="@mipmap/image2"
android:duration="100">item>
<item
android:drawable="@mipmap/image3"
android:duration="100">item>
<item
android:drawable="@mipmap/image4"
android:duration="100">item>
animation-list>
<ImageView
android:id="@+id/xml"
android:layout_width="130dp"
android:layout_height="70dp"
android:src="@drawable/bird_animlist"/>
private void xmlData(){
xml.setImageResource(R.drawable.bird_animlist);
final AnimationDrawable xmlDraw = (AnimationDrawable) xml.getDrawable();
findViewById(R.id.btn_xml).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("hp","xmlDraw.isStateful():"+xmlDraw.isStateful());
Log.d("hp","xmlDraw.isRunning():"+xmlDraw.isRunning());
if (xmlDraw.isRunning()){
xmlDraw.stop();
} else {
xmlDraw.start();
}
}
});
}
2、java代码实现:
private void javaData()
{
final AnimationDrawable javaDraw = new AnimationDrawable();
for (int i = 0; i < 4; i++) {
int id = getResources().getIdentifier("image"+(i+1),"mipmap",getPackageName());
Drawable draw = getResources().getDrawable(id);
javaDraw.addFrame(draw,50);
}
javaDraw.setOneShot(false);
java.setImageDrawable(javaDraw);
findViewById(R.id.btn_java).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (javaDraw.isRunning())
{
javaDraw.stop();
}
else
{
javaDraw.start();
}
}
});
}
1、Scale 缩放
1)xml代码实现
<scale
android:fromXScale="0"
android:toXScale="1.5"
android:fromYScale="0"
android:toYScale="1.5"
android:duration="1000"
android:pivotX="0"
android:pivotY="0"
android:fillAfter="true"
android:repeatCount="5"
android:repeatMode="reverse"
android:toXDelta ="0"
android:toYDelta ="0"
android:interpolator="@android:anim/linear_interpolator"
xmlns:android="http://schemas.android.com/apk/res/android">
scale>
/**
* 缩放xml
* @author hjy
* created at 2017/3/25 14:41
*/
private void doScale_xml()
{
ScaleAnimation sa = (ScaleAnimation) AnimationUtils.loadAnimation(TweenActivity.this,R.anim.scale);
tween_scale_xml.startAnimation(sa);
}
2)java代码实现
/**
* 缩放java
* @author hjy
* created at 2017/3/25 14:41
*/
private void doScale_java()
{
sA.setDuration(1000);
sA.setFillAfter(true);
sA.setRepeatCount(10);
sA.setInterpolator(this,android.R.anim.linear_interpolator);
sA.setRepeatMode(Animation.RESTART);
tween_scale_java.startAnimation(sA);
}
3)函数介绍
fromXDelta,fromYDelta
起始时X,Y座标,屏幕右下角的座标是X:320,Y:480
toXDelta, toYDelta
动画结束时X,Y的座标
interpolator 指定动画插入器
fromXScale,fromYScale
动画开始前X,Y的缩放,0.0为不显示, 1.0为正常大小
toXScale,toYScale
动画最终缩放的倍数, 1.0为正常大小,大于1.0放大
pivotX, pivotY
动画起始位置,相对于屏幕的百分比,两个都为50%表示动画从自身中间开始
startOffset
动画多次执行的间隔时间,如果只执行一次,执行前会暂停这段时间,单位毫秒
duration
一次动画效果消耗的时间,单位毫秒,值越小动画速度越快
repeatCount
动画重复的计数,动画将会执行该值+1次
repeatMode
动画重复的模式,reverse为反向,当第偶次执行时,动画方向会相反。
restart 为重新执行,方向不变
2、Rotate旋转
1)xml代码实现
<rotate
android:toDegrees="0"
android:fromDegrees="-360"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000"
android:fillAfter="true"
android:repeatMode="reverse"
android:repeatCount="100"
android:interpolator="@android:anim/linear_interpolator"
xmlns:android="http://schemas.android.com/apk/res/android">
rotate>
/**
* 旋转xml
* @author hjy
* created at 2017/3/25 14:41
*/
private void doRotate_xml()
{
RotateAnimation ra = (RotateAnimation) AnimationUtils.loadAnimation(TweenActivity.this,R.anim.rotate);
tween_rotate_xml.startAnimation(ra);
}
2)java代码实现
/**
* 旋转java
* @author hjy
* created at 2017/3/25 14:41
*/
private void doRotate_java()
{
rA.setDuration(1000);
rA.setFillAfter(true);
rA.setRepeatCount(20);
rA.setInterpolator(this,android.R.anim.linear_interpolator);
rA.setRepeatMode(Animation.REVERSE);
tween_rotate_java.startAnimation(rA);
}
3)函数介绍
fromDegrees 动画开始时的角度
toDegrees 动画结束时物件的旋转角度,正代表顺时针
pivotX 属性为动画相对于物件的X坐标的开始位置
pivotY 属性为动画相对于物件的Y坐标的开始位置
3、translate位移
1)xml代码实现
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="100"
android:toYDelta="100"
android:duration="500"
android:repeatCount="10"
android:interpolator="@android:anim/accelerate_interpolator">
translate>
/**
* 平移xml
* @author hjy
* created at 2017/3/25 11:55
*/
private void doTranslate_xml()
{
TranslateAnimation tA_xml = (TranslateAnimation) AnimationUtils.loadAnimation(TweenActivity.this,R.anim.translation);
tween_cat_xml.startAnimation(tA_xml);
}
2)java代码实现
类似以上代码。
3)函数介绍
fromXDelta,fromYDelta
起始时X,Y座标,屏幕右下角的座标是X:320,Y:480
toXDelta, toYDelta
动画结束时X,Y的座标
4、alpha透明度
1)xml代码实现
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1"
android:toAlpha="0"
android:duration ="5000"
android:fillAfter = "true"
android:repeatCount="10"
android:repeatMode="reverse">
alpha>
/**
* 透明度xml
* @author hjy
* created at 2017/3/25 14:35
*/
private void doAlpha_xml()
{
AlphaAnimation aa = (AlphaAnimation) AnimationUtils.loadAnimation(TweenActivity.this,R.anim.alpha);
tween_alpha_xml.startAnimation(aa);
}
2)java代码实现
/**
* 透明度java
* @author hjy
* created at 2017/3/25 14:34
*/
private void doAlpha_java()
{
aA.setRepeatCount(10);
aA.setFillAfter(true);
aA.setInterpolator(this,android.R.anim.accelerate_decelerate_interpolator);
aA.setRepeatMode(Animation.REVERSE);
aA.setDuration(5000);
tween_alpha_java.startAnimation(aA);
}
3)函数介绍
fromAlpha:开始时透明度
toAlpha: 结束时透明度
duration:动画持续时间
fillAfter:设置动画结束后保持当前的位置
4、set动画组合使用
这里就详细介绍了…