Android 动画

Android基础动画

  1. Tween Animation 变换动画
  2. Frame Animation 帧动画
  3. Layout Animation 布局动画
  4. Property Animation 属性动画

Tween Animation(变换动画)在Android中又被分为四种:
Alpha:渐变透明度动画
Scale:渐变尺寸缩放动画
Translate:位置移动动画
Rotate:旋转动画

Tween Animation共同属性:

  1. Duration:动画持续时间(单位:毫秒)
  2. fillAfter:设置为true,动画转化在动画结束后被应用
  3. fillBefore:设置为true,动画转化在动画开始前被应用
  4. interpolator:动画插入器(加速、减速插入器)
  5. repeatCount:动画重复次数
  6. repateMode:顺序重复/倒序重复
  7. startOffset:动画之间的时间间隔

Animation实现方式有两种:

  1. 配置文件(/res/anim)——alpha、scale、translate、rotate。更简单。
  2. Java代码实现——AlphaAnimation、ScaleAnimation、TranAnimation、RotateAnimation。更灵活。
    两种方式各有所长:
    如果变换比较多,而且很多参数都是动态的(比如时间间隔、位移移动的坐标通过动态获取、动态计算),则推荐使用Java代码实现。
    如果动画是一个固定的效果,则推荐使用配置文件的方式。

通过加载配置文件的方式实现动画:
Animation scale = AnimationUtils.loadAnimation(TweenActivity.this,R.anim.scale_anim);
//开始动画
img.startAnimation(scale);


MainActivity.java

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity implements OnClickListener {

    private ImageView image;
    private Button scale;
    private Button rotate;
    private Button translate;
    private Button mix;
    private Button alpha;
    private Button continue_btn;
    private Button continue_btn2;
    private Button flash;
    private Button move;
    private Button change;
    private Button layout;
    private Button frame;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);
        image = (ImageView) findViewById(R.id.image);
        scale = (Button) findViewById(R.id.scale);
        rotate = (Button) findViewById(R.id.rotate);
        translate = (Button) findViewById(R.id.translate);
        alpha = (Button) findViewById(R.id.alpha);
        continue_btn = (Button) findViewById(R.id.continue_btn);
        continue_btn2 = (Button) findViewById(R.id.continue_btn2);
        flash = (Button) findViewById(R.id.flash);
        move = (Button) findViewById(R.id.move);
        change=(Button) findViewById(R.id.change);
        layout=(Button) findViewById(R.id.layout);
        frame=(Button) findViewById(R.id.frame);
        scale.setOnClickListener(this);
        rotate.setOnClickListener(this);
        translate.setOnClickListener(this);
        alpha.setOnClickListener(this);
        continue_btn.setOnClickListener(this);
        continue_btn2.setOnClickListener(this);
        flash.setOnClickListener(this);
        move.setOnClickListener(this);
        change.setOnClickListener(this);
        layout.setOnClickListener(this);
        frame.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        // TODO Auto-generated method stub
        Animation loadAnimation;
        switch (view.getId()) {
        case R.id.scale: {
            loadAnimation = AnimationUtils.loadAnimation(this, R.anim.scale);
            image.startAnimation(loadAnimation);
            break;
        }

        case R.id.rotate: {
            loadAnimation = AnimationUtils.loadAnimation(this, R.anim.rotate);
            image.startAnimation(loadAnimation);
            break;
        }

        case R.id.translate: {

            loadAnimation = AnimationUtils
                    .loadAnimation(this, R.anim.translate);
            image.startAnimation(loadAnimation);
            break;
        }

        case R.id.continue_btn: {
            loadAnimation = AnimationUtils
                    .loadAnimation(this, R.anim.translate);
            image.startAnimation(loadAnimation);
            final Animation loadAnimation2 = AnimationUtils.loadAnimation(this,
                    R.anim.rotate);
            loadAnimation.setAnimationListener(new AnimationListener() {

                @Override
                public void onAnimationStart(Animation arg0) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onAnimationRepeat(Animation arg0) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onAnimationEnd(Animation arg0) {
                    // TODO Auto-generated method stub
                    image.startAnimation(loadAnimation2);
                }
            });
            break;
        }

        case R.id.continue_btn2: {
            loadAnimation = AnimationUtils.loadAnimation(this,
                    R.anim.continue_anim);
            image.startAnimation(loadAnimation);
            break;
        }

        case R.id.alpha: {      
            loadAnimation = AnimationUtils.loadAnimation(this, R.anim.alpha);
            image.startAnimation(loadAnimation);
            break;
        }

        case R.id.move: {
            TranslateAnimation translate = new TranslateAnimation(-50, 50,
                    0, 0);
            translate.setDuration(1000);
            translate.setRepeatCount(Animation.INFINITE);
            translate.setRepeatMode(Animation.REVERSE);
            image.startAnimation(translate);

            break;
        }

        case R.id.flash: {

            AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);
            alphaAnimation.setDuration(100);
            alphaAnimation.setRepeatCount(10);
            
            alphaAnimation.setRepeatMode(Animation.REVERSE);
            image.startAnimation(alphaAnimation);

            break;
        }
        
        case R.id.change:
        {
            Intent intent=new Intent(MainActivity.this,MainActivity2.class);
            startActivity(intent);
            overridePendingTransition(R.anim.zoom_in,R.anim.zoom_out);
            break;
        }
        
        case R.id.layout:
        {
            Intent intent=new Intent(MainActivity.this,ListActivity.class);
            startActivity(intent);
            break;
        }
        
        case R.id.frame:
        {
            image.setImageResource(R.drawable.anim_list);       
            break;
            
        }

        }
    }

}

main.xml




    

        

ListActivity.java

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.animation.AnimationUtils;
import android.view.animation.LayoutAnimationController;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ListActivity extends Activity{
    
    private ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_layout);
        listView=(ListView) findViewById(R.id.listView);
        Listlist=new ArrayList();
        for(int i=0;i<20;i++)
        {
            list.add("aa"+i);
        }
        ArrayAdapteradapter=new ArrayAdapter(this, android.R.layout.simple_list_item_1, list);
        listView.setAdapter(adapter);
        LayoutAnimationController lac=new LayoutAnimationController(AnimationUtils.loadAnimation(this, R.anim.zoom_in));
        lac.setOrder(LayoutAnimationController.ORDER_NORMAL);
        listView.setLayoutAnimation(lac);
        listView.startLayoutAnimation();
    }

}

MainActivity2.java

package com.imooc.android_animation;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity2 extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);
    }
    
}

res/anim动画配置文件
alpha.xml




    
    


continue_anim.xml




    
    


rotate.xml




    



scale.xml




    


translate.xml




    


zoom_in.xml



  
  
  

zoom_out.xml




    

    


演示效果:

anim.gif

你可能感兴趣的:(Android 动画)