逐帧动画
\1. 在drawable中新建文件,并将帧图片放入drawable内
\2. 编辑xml文件
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/img001" android:duration="60"/>
<item android:drawable="@drawable/img002" android:duration="60"/>
<item android:drawable="@drawable/img003" android:duration="60"/>
<item android:drawable="@drawable/img004" android:duration="60"/>
<item android:drawable="@drawable/img005" android:duration="60"/>
<item android:drawable="@drawable/img006" android:duration="60"/>
</animation-list>
\3. 将动画设置为布局(控件)背景
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:background="@drawable/fairy"
android:id="@+id/ll"
android:orientation="vertical">
</LinearLayout>
\4. java代码控制动画播放
package com.example.myanimation;
public class MainActivity extends AppCompatActivity {
private boolean flag=true;//记录播放状态
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout linearLayout=findViewById(R.id.ll); //获取布局
final AnimationDrawable anim= (AnimationDrawable) linearLayout.getBackground();//通过布局背景获取动画资源
//为布局管理器添加单击事件
linearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(flag){
//播放
anim.start();
flag=false;
}else {
//暂停
anim.stop();
flag=true;
}
}
});
}
}
补间动画
动画通用属性
android:interpolator:用于控制动画的变化速度
android:repeatMode:用于指定动画的重复方式,可以设置的值有reverse(反向)、restart(重新开始)
android:repeatCount:用于指定动画重复次数,可以为正整数,也可以为infinite(无限循环)
android:duration:用于定义动画播放时长
透明度渐变动画alpha
android:fromAlpha:指定动画开始时View的透明度,1为完全不透明
android:toAlpha:指定动画结束时View的透明度,0为完全透明
旋转动画rotate
android:fromDegrees:指定View开始时的角度
android:toDegrees:指定View结束时的角度
android:pivotX:指定旋转点的X坐标,当值为50时则从View左上角平移50px的位置
android:pivotY:指定旋转点的Y坐标,当值为50%时则取View长度的中点的位置
缩放动画scale
android:fromXScale:指定开始时X轴的缩放系数,值为1.0表示无变化
android:fromYScale:指定开始时Y轴的缩放系数,值为1.0表示无变化
android:toXScale:指定结束时X轴的缩放系数,值为2表示放大两倍
android:toYScale:指定结束时Y轴的缩放系数,值为0.5表示缩小一倍
android:pivotX:指定缩放点的X坐标
android:pivotY:指定缩放点的Y坐标
平移动画translate
android:fromXDelta:指定平移开始时View的X坐标
android:fromYDelta:指定平移开始时View的Y坐标
android:toXDelta:指定平移结束时View的X坐标
android:toYDelta:指定平移结束时View的Y坐标
综合案例
XML动画
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!--透明度动画-->
<alpha android:fromAlpha="1"
android:toAlpha="0"
/>
<!--旋转动画-->
<rotate android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"/>
<!--缩放动画-->
<scale
android:fromXScale="1"
android:fromYScale="1"
android:toXScale="0.2"
android:toYScale="0.2"
android:pivotX="50%"
android:pivotY="50%"/>
<!--平移动画-->
<translate
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="300"
android:toYDelta="300"/>
</set>
java控制
package com.example.myanimation;
public class MainActivity2 extends AppCompatActivity {
private ImageView iv;
private LinearLayout ll2;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.*activity_2*);
initView();
}
private void initView() {
iv = (ImageView) findViewById(R.id.*iv*);
ll2 = (LinearLayout) findViewById(R.id.*ll2*);
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Animation anim= AnimationUtils.*loadAnimation*(MainActivity2.this,R.anim.*alpha*);
anim.setDuration(3000);//设置动画时间
// 使用AnimationUtils.loadAnimation定义情况下此两项无用
// anim.setRepeatCount(-1);
// anim.setRepeatMode(Animation.REVERSE);
iv.startAnimation(anim);//开启动画
}
});
}
}