欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android Studio实现一个简单的动画

程序员文章站 2022-03-11 15:49:30
...

实现效果

1.图
图1
Android Studio实现一个简单的动画
图2
Android Studio实现一个简单的动画
2.动图
Android Studio实现一个简单的动画

步骤

1.启动Android Studio并创建一个新项目。
2.在drawable下创建文件laoyangfly.xml,同时将要实现的动画的图片导入到drawable中。
(1)直接右键–>new–>Deawable Resource File–>将文件取名为laoyangfly。
Android Studio实现一个简单的动画
Android Studio实现一个简单的动画
Android Studio实现一个简单的动画

(2)将导入到drawable
直接复制图片,然后到drawable中粘贴(paste)
Android Studio实现一个简单的动画
六张图片:审核还没过
链接: link.
Android Studio实现一个简单的动画

3.打开res\layout目录下的activity_main.xml文件,在文件中声明一个ImageView控件。
4.打开src/ayoutexample包下的MainActivity.java文件,在文件中实现补间动画与帧动画。

代码

layangfly.xml的代码

<?xml version="1.0" encoding="utf-8"?>
<!--
	根标签为animation-list,其中oneshot代表着是否只展示一遍,设置为false会不停的循环播放动画
	根标签下,通过item标签对动画中的每一个图片进行声明
	android:duration 表示展示所用的该图片的时间长度
 -->
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item
        android:drawable="@drawable/icon1"
        android:duration="120">
    </item>
    <item
        android:drawable="@drawable/icon2"
        android:duration="120">
    </item>
    <item
        android:drawable="@drawable/icon3"
        android:duration="120">
    </item>
    <item
        android:drawable="@drawable/icon4"
        android:duration="120">
    </item>
    <item
        android:drawable="@drawable/icon5"
        android:duration="120">
    </item>
    <item
        android:drawable="@drawable/icon6"
        android:duration="120">
    </item>
</animation-list>

activity_main.xml的代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:apk = "http://schemas.android.com/apk/res/android"
    apk:orientation="vertical"
    apk:layout_width="fill_parent"
    apk:layout_height="fill_parent">

    <ImageView
        apk:id="@+id/laoyangfly"
        apk:layout_width="wrap_content"
        apk:layout_height="wrap_content"
        apk:background="@drawable/laoyangfly">
    </ImageView>
</LinearLayout>

MainActivity.java的代码

package edu.hrbust.sythreecartoon;

import androidx.appcompat.app.AppCompatActivity;

import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.graphics.drawable.AdaptiveIconDrawable;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;

public class MainActivity extends Activity {

    // 记录图标ImageView当前位置
    float curX = 0;
    float curY = 0;
    // 记录图标ImageView下一个位置的坐标
    private AdaptiveIconDrawable animDance;
    float nextX = 0;
    float nextY = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 获取组件
        final ImageView imageView = (ImageView)findViewById(R.id.laoyangfly);
        final Handler handler = new Handler()
        {

            @Override
            public void handleMessage(Message msg)
            {
                if(msg.what == 0x123)
                {
                    // 横向上一直向右飞
                    if(nextX > 320)
                    {
                        curX = nextX = 0;
                    }
                    else
                    {
                        nextX += 8;
                    }
                    // 纵向上可以随机上下
                    nextY = curY + (float)(Math.random() * 10 - 5);
                    // 设置显示图标的ImageView发生位移改变
                    TranslateAnimation anim = new TranslateAnimation(curX,nextX,curY,nextY);
                    curX = nextX;
                    curY = nextY;
                    anim.setDuration(200);
                    // 开始位移动画
                    imageView.startAnimation(anim);
                }
            }
        };

        final AnimationDrawable butterfly = (AnimationDrawable) imageView.getBackground();
        imageView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // 开始播放图标的逐帧动画
                butterfly.start();
                // 通过定制器控制每0.2秒运行一次TranslateAnimation动画
                new Timer().schedule(new TimerTask() {
                    @Override
                    public void run() {
                        handler.sendEmptyMessage(0x123);
                    }
                },0,50);
            }
        });

    }
}

源代码程序包

还没审核过。
链接: link.