Android动画之Frame Animation逐帧动画

    xiaoxiao2021-12-14  22

    所谓的逐帧动画,在我的理解并能不算是动画,它的实现是一系列相似的图片播放得出的效果.类似于幻灯片,附上实际效果图:

    第一步: 你需要一系列图片,模拟动画,图片已上传.把这些图片放在drawable目录下.选中drawable右键选择new–>Drawable resource file

    名字随便取,Root element 选择animation-list

    wifi_animation代码如下:

    <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false" > <item android:drawable="@drawable/wifi_icon1" android:duration="100"></item> <item android:drawable="@drawable/wifi_icon2" android:duration="100"></item> <item android:drawable="@drawable/wifi_icon3" android:duration="100"></item> <item android:drawable="@drawable/wifi_icon4" android:duration="100"></item> <item android:drawable="@drawable/wifi_icon5" android:duration="100"></item> <item android:drawable="@drawable/wifi_icon6" android:duration="100"></item> <!-- android:oneshot="false" 表示循环播放, 当为true的时候,播放到最后 一张图片会停止 android:duration="100" 表示播放时长单位为毫秒 <item></item>的顺序是动画播放的顺序 --> </animation-list>

    第二步: activity_main.xml中拖一个ImageView和两个Button(Button控制动画的播放与停止),注意ImageView的src属性是你定义的animation-list.代码如下:

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="myself.myapplication.MainActivity"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/wifi_animation" android:layout_marginTop="86dp" android:id="@+id/imageView" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" /> <Button android:text="@string/fram" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="85dp" android:id="@+id/button" android:layout_below="@+id/imageView" android:layout_centerHorizontal="true" /> <Button android:text="@string/stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/button" android:layout_alignLeft="@+id/button" android:layout_alignStart="@+id/button" android:layout_marginTop="43dp" android:id="@+id/button2" /> </RelativeLayout>

    第三步: 编写MainActivity.Java,代码如下:

    package myself.myapplication; import android.graphics.drawable.AnimationDrawable; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.ImageView; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private Button b1,b2; private ImageView imageView; /** *实现逐帧动画必须用到的类, *AnimationDrawable 继承自 DrawableContainer类 * DrawableContainer类继承自Drawable类 * 我们在drawable目录下定义的动画须通过该类得到 */ private AnimationDrawable animationDrawable; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b1 = (Button) findViewById(R.id.button); b2 = (Button) findViewById(R.id.button2); imageView = (ImageView) findViewById(R.id.imageView); //逐帧动画对象是通过imageView得到的,因为ImageView是动画显示的载体 animationDrawable = (AnimationDrawable) imageView.getDrawable(); //启动按钮点击事件 b1.setOnClickListener(this); b2.setOnClickListener(this); } @Override public void onClick(View v) { //匹配播放和停止按钮的点击事件 switch (v.getId()) { case R.id.button: //如果动画没有在播放,就播放动画 if (!animationDrawable.isRunning()){ animationDrawable.start(); } break; case R.id.button2: //如果动画正在播放,就停止播放动画 if (animationDrawable.isRunning()) { animationDrawable.stop(); } break; } } }

    项目素材:

    转载请注明原文地址: https://ju.6miu.com/read-970223.html

    最新回复(0)