一、动画类型

1.逐帧动画(frame-by-frame animation)

2.补间动画(tweened animation)

3.属性动画(property animation)

二、animation-list

image.png

三、动画的启动和停止

1.获取动画的Drawable资源

image.png

2.启动动画

image.png

3.停止动画

image.png

四、实现步骤

1.添加animation-list

image.png

2.以背景图的方式添加在布局中

image.png

3.控件绑定,添加点击事件

image.png

4.创建动画对象获取点击之后对应的图片

image.png

5.添加标志位,进行启动和停止对应的判断

image.png

五、总体代码

  1. 1.动画frame.xml文件
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <animation-list xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item android:drawable="@drawable/frame_one" android:duration="120"/>
  4. <item android:drawable="@drawable/frame_two" android:duration="120"/>
  5. <item android:drawable="@drawable/frame_three" android:duration="120"/>
  6. <item android:drawable="@drawable/frame_four" android:duration="120"/>
  7. <item android:drawable="@drawable/frame_five" android:duration="120"/>
  8. <item android:drawable="@drawable/frame_six" android:duration="120"/>
  9. <item android:drawable="@drawable/frame_seven" android:duration="120"/>
  10. <item android:drawable="@drawable/frame_eight" android:duration="120"/>
  11. <item android:drawable="@drawable/frame_nine" android:duration="120"/>
  12. </animation-list>
  1. 2.布局activity_main.xml文件
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/rl_click"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:background="@drawable/frame"/>
  1. 3.MainActivity文件代码
  1. package com.example.myframeanimation;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.graphics.drawable.AnimationDrawable;
  4. import android.graphics.drawable.Drawable;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.RelativeLayout;
  8. import android.widget.Toast;
  9. public class MainActivity extends AppCompatActivity {
  10. //4.添加标志位,点击启动和停止
  11. private boolean flag=true;
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.activity_main);
  16. //1.绑定控件
  17. RelativeLayout rl_click = findViewById(R.id.rl_click);
  18. //3.创建实例对象获取点击之后对应的图片
  19. final AnimationDrawable animationDrawable = (AnimationDrawable) rl_click.getBackground();
  20. //2.对事件设置监听
  21. rl_click.setOnClickListener(new View.OnClickListener() {
  22. @Override
  23. public void onClick(View v) {
  24. //5.判断如果为true,则启动,启动之后为false,点击停止,则停止之后为true,进入循环
  25. if (flag){
  26. animationDrawable.start();
  27. Toast.makeText(MainActivity.this, "动画启动了", Toast.LENGTH_SHORT).show();
  28. flag=false;
  29. }else {
  30. animationDrawable.stop();
  31. Toast.makeText(MainActivity.this, "动画停止了", Toast.LENGTH_SHORT).show();
  32. flag=true;
  33. }
  34. }
  35. });
  36. }
  37. }
  1. 4.效果图<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1574587/1622537463715-eb650cb6-4683-42e9-94eb-11f53e5eb938.png#clientId=ue2a8550a-512d-4&from=paste&height=545&id=u3148d046&margin=%5Bobject%20Object%5D&name=image.png&originHeight=545&originWidth=812&originalType=binary&size=153095&status=done&style=none&taskId=ud8e6324b-1d84-4770-b1aa-5612552cb00&width=812)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1574587/1622537486766-fdd27cd5-d89e-412a-ae9b-16f02360ad75.png#clientId=ue2a8550a-512d-4&from=paste&height=540&id=ua5053795&margin=%5Bobject%20Object%5D&name=image.png&originHeight=540&originWidth=844&originalType=binary&size=143936&status=done&style=none&taskId=u59bff5a3-751b-4db1-9d03-9120fc43619&width=844)