• Android Animation 动画Demo(Frame帧动画)


    上一页介绍Animation动画第一:Tween吐温动画。

    本文介绍了以下Animation也有动画的形式:Frame帧动画。

    Frame动画是一系列照片示出的顺序按照一定的处理,和机制,以放电影很阶段似,动画。Frame动画能够被定义在XML文件里。也能够全然编码实现(后面会给出这两种实现方式的源码Demo)。

    以下分别介绍:

    一、定义在xml中实现:

    实现效果图:

    源码:

    布局文件:main.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#ffffff"
        android:orientation="vertical" >
    
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:gravity="center_horizontal"
            android:text="以xml文件的形式实现Frame动画"
            android:textColor="#000000"
            android:textSize="20sp" />
    
        <ImageView
            android:id="@+id/image"
            android:layout_width="match_parent"
            android:layout_height="300dp"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:layout_marginTop="5dp" />
    
        <Button
            android:id="@+id/startButton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="播放逐帧动画"
            android:textColor="#000000" />
    
        <Button
            android:id="@+id/stopButton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="停止逐帧动画"
            android:textColor="#000000" />
    
    </LinearLayout>

    frame.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android" >
     <!-- android:oneshot假设定义为true的话。此动画仅仅会运行一次。假设为false则一直循环。 -->
        android:oneshot="false" >
    
    
        <!-- 指定每一帧是使用的图片,及播放时间 -->
        <item
            android:drawable="@drawable/f1"
            android:duration="500">
        </item>
        <item
            android:drawable="@drawable/f2"
            android:duration="500">
        </item>
        <item
            android:drawable="@drawable/f3"
            android:duration="500">
        </item>
    
    </animation-list>

    FrameDemoActivity:

    package com.zhy.com;
    
    import android.app.Activity;
    import android.graphics.drawable.AnimationDrawable;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ImageView;
    
    /**
     * 
     	逐帧动画Frame动画实例
     * 
     */
    public class FrameDemoActivity extends Activity {
    	private Button startBtn;// 開始动画button
    	private Button stopBtn;// 停止动画button
    	private ImageView imageView;// 显示图片
    	private AnimationDrawable anim;
    
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		// 实例化控件
    		startBtn = (Button) findViewById(R.id.startButton);
    		stopBtn = (Button) findViewById(R.id.stopButton);
    		imageView = (ImageView) findViewById(R.id.image);
    		// 指定动画的帧的列表
    		imageView.setBackgroundResource(R.anim.frame);
    		// AnimationDrawable--与逐帧动画相关的Drawable
    		anim = (AnimationDrawable) imageView.getBackground();
    		// button事件
    		startBtn.setOnClickListener(new OnClickListener() {
    			public void onClick(View v) {
    				// 開始动画
    				anim.start();
    			}
    		});
    		stopBtn.setOnClickListener(new OnClickListener() {
    			public void onClick(View v) {
    				anim.stop();// 停止播放
    			}
    		});
    
    	}
    }

    二、直接代码编码的形式实现:

    实现效果图:

    源码:

    布局文件:

    activity_main:

    <?

    xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffff" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:gravity="center_horizontal" android:text="在代码中直接编码的形式实现Frame动画" android:textColor="#000000" android:textSize="20sp" /> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="300dp" android:layout_marginBottom="5dp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:layout_marginTop="5dp" /> <Button android:id="@+id/startButton" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="播放逐帧动画" android:textColor="#000000" /> <Button android:id="@+id/stopButton" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="停止逐帧动画" android:textColor="#000000" /> </LinearLayout>


    MainActivity:

    package com.framedemo2;
    
    import android.app.Activity;
    import android.graphics.drawable.AnimationDrawable;
    import android.graphics.drawable.Drawable;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ImageView;
    
    public class MainActivity extends Activity implements OnClickListener {
    	private Button startBtn;// 開始动画button
    	private Button stopBtn;// 停止动画button
    	private ImageView imageView;// 显示图片
    	private AnimationDrawable anim;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		// 实例化控件
    		startBtn = (Button) findViewById(R.id.startButton);
    		stopBtn = (Button) findViewById(R.id.stopButton);
    		imageView = (ImageView) findViewById(R.id.image);
    		anim = new AnimationDrawable();
    
    		startBtn.setOnClickListener(this);
    		stopBtn.setOnClickListener(this);
    
    		for (int i = 1; i <= 3; i++) {
    			// 依据资源名称和文件夹获取R.java中相应的资源ID
    			int id = getResources().getIdentifier("f" + i, "drawable",
    					getPackageName());
    			// 依据资源ID获取到Drawable对象
    			Drawable drawable = getResources().getDrawable(id);
    			// 将此帧加入到AnimationDrawable中
    			anim.addFrame(drawable, 300);
    		}
    		anim.setOneShot(false); // 假设设置为false,则仅仅会播放一次。不会循环播放。

    imageView.setBackgroundDrawable(anim); // 将动画设置为ImageView背景 } @Override public void onClick(View v) { switch (v.getId()) { case R.id.startButton: anim.start(); break; case R.id.stopButton: anim.stop(); break; default: break; } } }


    以下提供以上两种实现方式的源码,供读者參考使用:

    以xml形式实现逐帧动画的源码:

    点击下载源代码

    直接以编码的方式实现逐帧动画的源码:

    点击下载源代码

    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    小球下落
    时隔半年再设环境变量。。笑哭了!
    Quartus+modelsim开发环境的搭建
    因式分解技巧——拆项与添项
    因式分解技巧——分组分解
    因式分解技巧——代公式
    因式分解技巧——提公因式
    一个2014年的数学日历
    用面积来证三角不等式
    一条直线若能平分矩形面积,则它必然经过矩形的中心
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4754722.html
Copyright © 2020-2023  润新知