zoukankan      html  css  js  c++  java
  • Android中的动画具体解释系列【2】——飞舞的蝴蝶

    这一篇来使用逐帧动画和补间动画来实现一个小样例,首先我们来看看Android中的补间动画。

    Android中使用Animation代表抽象的动画类,该类包含以下几个子类:

    AlphaAnimation:透明改变动画。

    ScaleAnimation:大小缩放动画。

    TranslateAnimation:位移变化动画。

    RotateAnimation:旋转动画。

    我们以下使用位移动画和逐帧动画来实现这个小样例。先看看执行效果:

    蝴蝶挥动翅膀的逐帧动画文件:

    <?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/butterfly_f01" android:duration="120" />
    	<item android:drawable="@drawable/butterfly_f02" android:duration="120" />
    	<item android:drawable="@drawable/butterfly_f03" android:duration="120" />
    	<item android:drawable="@drawable/butterfly_f04" android:duration="120" />
    	<item android:drawable="@drawable/butterfly_f05" android:duration="120" />
    	<item android:drawable="@drawable/butterfly_f06" android:duration="120" />																
    </animation-list>
    界面布局文件:

    <?xml version="1.0" encoding="utf-8"?

    > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/background" > <ImageView android:id="@+id/butterfly" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@anim/butteryfly" /> </LinearLayout>

    详细逻辑及位移动画:


    package com.example.butteryfly;
    
    import java.util.Timer;
    import java.util.TimerTask;
    
    import android.app.Activity;
    import android.graphics.drawable.AnimationDrawable;
    import android.os.Bundle;
    import android.os.Handler;
    import android.view.Display;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.animation.TranslateAnimation;
    import android.widget.ImageView;
    
    public class MainActivity extends Activity {
    	
    	private float curX = 0;
    	private float curY = 30;
    	
    	private float nextX = 0;
    	private float nextY = 0;
    	
    	private int windowW = 0;
    	private int windowH = 0;
    	
    	private ImageView imageView;
    	
    	Handler handler = new Handler(){
    		public void handleMessage(android.os.Message msg) {
    			if(msg.what == 0x123){
    				if(nextX > windowW || nextY > windowH){
    					curX = nextX = 0;
    				}else{
    					nextX += 8;
    				}
    				
    				nextY = curY + (float) (Math.random() * 20 - 10);
    				TranslateAnimation anim = new TranslateAnimation(curX, nextX, curY, nextY);
    				curX = nextX;
    				curY = nextY;
    				anim.setDuration(200);
    				imageView.startAnimation(anim);
    			}
    		};
    	};
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		imageView = (ImageView) findViewById(R.id.butterfly);
    		
    		Display display = getWindowManager().getDefaultDisplay(); 
    		windowW = display.getWidth();
    		windowH = display.getHeight();
    		
    		final AnimationDrawable butterfly = (AnimationDrawable) imageView.getBackground();
    		imageView.setOnClickListener(new OnClickListener() {
    			
    			@Override
    			public void onClick(View arg0) {
    				butterfly.start();
    				new Timer().schedule(new TimerTask() {
    					
    					@Override
    					public void run() {
    						handler.sendEmptyMessage(0x123);
    					}
    				}, 0, 200);
    			}
    		});
    	}
    }
    




  • 相关阅读:
    Tomcat域名绑定
    Windows下搭建PHP开发环境
    创业项目该如何选择技术?
    linux mount 挂接新硬盘
    Linux 查看系统硬件信息
    this super的用法
    构造方法
    多态
    抽象类和接口
    继承
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6815977.html
Copyright © 2011-2022 走看看