安卓比较简单和基础的动画效果有三种,分别是帧动画(Drawable Animation)、补间动画(View Animation)、属性动画(Property Animation)。下面对每种动画进行介绍,同时实现利用帧动画实现京东小哥送快递的动画。
帧动画就是顺序播放一组预先定义好的图片,就类似于我们观看视频,就是一张一张的图片连续播放。
view动画也称为补间动画,因为我们只需要拿到一个view,设定它开始和结束的位置,中间的view会自动由系统补齐,而不需要帧动画每一幅图都是提前准备好的。
View动画是Android一开始就提供的比较原始的动画,主要支持四种效果:平移、缩放、旋转、透明度变化(渐变) 四种基本效果,我们可以再这四种基础效果的基础上,选择其中的几种进行组合。
;
属性动画,属性动画只对Android 3.0(API 11)以上版本的Android系统才有效,
这种动画可以设置给任何Object,包括那些还没有渲染到屏幕上的对象。这种动画是可扩展的,可以让你自定义任何类型和属性的动画。
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/frame_0" android:duration="200"/> <item android:drawable="@drawable/frame_1" android:duration="200"/> <item android:drawable="@drawable/frame_2" android:duration="200"/> </animation-list>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="实现帧动画" android:textSize="20sp" android:textColor="#9C27B0" android:textStyle="bold" /> <ImageView android:id="@+id/imageView1" android:layout_width="match_parent" android:layout_height="296dp"> </ImageView> </LinearLayout>
package com.example.donghua; import androidx.appcompat.app.AppCompatActivity; import android.graphics.drawable.AnimationDrawable; import android.graphics.drawable.TransitionDrawable; import android.os.Bundle; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.ImageView; public class MainActivity extends AppCompatActivity { private ImageView imageView1;//图片框 private AnimationDrawable AD; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView1 = findViewById(R.id.imageView1); imageView1.setImageResource(R.drawable.anim_frame); //设置资源 AD = (AnimationDrawable) imageView1.getDrawable(); AD.setOneShot(false); } @Override protected void onStart(){ startAnimation(); super.onStart(); } private void startAnimation() { AD.start(); Animation trans = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0, Animation.RELATIVE_TO_SELF,0, Animation.RELATIVE_TO_SELF,0, Animation.RELATIVE_TO_SELF,0); trans.setDuration(1000); trans.setRepeatCount(Animation.INFINITE); imageView1.startAnimation(trans); } }
4.5 效果图