android开发中常见的几种动画

动画类型: Tween动画、frame动画、LayoutAnimation动画、PropertyAnimation属性动画。

——————————————————————————————————————————>

Tween Animation动画分类四种:Alpha、Scale、Rotate、translate
动画持续时间,以毫秒为单位、fillAfter() 是否保持动画后的效果
interpolator(动画插入器,加速动画还是减速动画)
repeatCount()动画重复次数
repateMode() 顺序重复还是倒序重复
startOffset() 动画之间的时间间隔(两个动画之间的间隔)

Tween Animation实现方式有两种:
在配置文件中编写
使用java代码实现AlphaAnimation、ScaleAnimation、RotateAnimation、TranslateAnimation;

——————————————————————————————————————————>

控件.startAnimation(传入一个动画对象);
translateAnimation.setAnimationListener( ) 对某个动画对象设置监听
android:startOffset="2000" 多久之后再执行动画?

案例:动画监听器、activity之间的页面跳转动画


布局动画 使用LayoutAnimation类来实现。为View Group添加动画 使用LayoutAnimationController
案例:listView条目散列动画

package com.example.tuhuadmin.truekeystore;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;

/**
 * Created by on 2016/7/4.
 * PackageName:com.example.tuhuadmin.truekeystore
 * Author:crs
 */

public class AnimationActivity extends Activity implements View.OnClickListener {
    private Button bt1;
    private Button bt2;
    private Button bt3;
    private Button bt4;
    private Button bt5;
    private Button bt6;
    private Button bt7;
    private Button bt8;
    private Button btn9;
    private ImageView iv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_animation);

        initViews();
        initListener();
        //四种基本动画的实现

        //如何实现动画序播? 一个播放完另一个开始播放?   通过为动画设置监听实现
        //使用动画集合实现组合动画
        //activity之间的页面跳转动画
        //布局动画案例
    }


    private void initViews() {
        bt1 = (Button) findViewById(R.id.bt1);
        bt2 = (Button) findViewById(R.id.bt2);
        bt3 = (Button) findViewById(R.id.bt3);
        bt4 = (Button) findViewById(R.id.bt4);
        bt5 = (Button) findViewById(R.id.btn5);
        bt6 = (Button) findViewById(R.id.btn6);
        bt7 = (Button) findViewById(R.id.btn7);
        bt8 = (Button) findViewById(R.id.btn8);
        btn9 = (Button) findViewById(R.id.btn9);


        iv = (ImageView) findViewById(R.id.iv);
    }

    private void initListener() {
        bt1.setOnClickListener(this);
        bt2.setOnClickListener(this);
        bt3.setOnClickListener(this);
        bt4.setOnClickListener(this);
        bt5.setOnClickListener(this);
        bt6.setOnClickListener(this);
        bt7.setOnClickListener(this);
        bt8.setOnClickListener(this);
        btn9.setOnClickListener(this);
    }


    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.bt3: {
                //透明度动画 fromAlpha 动画起始时的透明度;toAlpha动画结束时的透明度 0.0完全透明
                Animation alphaAnimation = AnimationUtils.loadAnimation(AnimationActivity.this, R.anim.alpha);
                iv.startAnimation(alphaAnimation);
            }
            break;
            case R.id.bt1: {
                //哪些参数是规定缩放中心的   使用了android中的插入器  android:pivotX="50%"   android:pivotY="50%";
                Animation animation = AnimationUtils.loadAnimation(AnimationActivity.this, R.anim.scale);
                iv.startAnimation(animation);
            }
            break;
            case R.id.bt4: {
                //依他本身为原点进行位移
                Animation animation = AnimationUtils.loadAnimation(AnimationActivity.this, R.anim.trtanslate);
                iv.startAnimation(animation);
            }
            break;
            case R.id.bt2: {
                //旋转的中心点,旋转的角度从0到360度
                //通过代码设置插入器
                Animation animation = AnimationUtils.loadAnimation(AnimationActivity.this, R.anim.rotate);
                animation.setInterpolator(new AccelerateInterpolator(2f));
                iv.startAnimation(animation);
            }
            break;
            case R.id.btn5: {
                //其实是对动画的监听,如何对动画(动画对象)设置监听?
                Animation translateAnimation = AnimationUtils.loadAnimation(AnimationActivity.this, R.anim.trtanslate);
                final Animation rotateAnimation = AnimationUtils.loadAnimation(AnimationActivity.this, R.anim.rotate);
                translateAnimation.setFillAfter(true);
                iv.startAnimation(translateAnimation);

                translateAnimation.setAnimationListener(new Animation.AnimationListener() {
                    @Override
                    public void onAnimationStart(Animation animation) {
                    }

                    @Override
                    public void onAnimationEnd(Animation animation) {
                        //动画结束
                        iv.startAnimation(rotateAnimation);
                    }

                    @Override
                    public void onAnimationRepeat(Animation animation) {
                    }
                });

            }
            break;
            case R.id.btn6: {
                //为后面的哪一个动画设置startOffset属性即可。
                Animation animation = AnimationUtils.loadAnimation(AnimationActivity.this, R.anim.continue_set);
                iv.startAnimation(animation);
            }
            break;
            case R.id.btn7: {
                //利用动画的setRepeatCount() setRepeatMode() 两个方法实现循环闪烁效果;使用代码的方式实现
                AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);
                alphaAnimation.setRepeatCount(5);
                alphaAnimation.setDuration(100);
                alphaAnimation.setRepeatMode(Animation.REVERSE);//倒叙
                //alphaAnimation.setRepeatMode(Animation.RESTART);//倒叙
                iv.startAnimation(alphaAnimation);
            }
            break;
            case R.id.btn8: {
                //两个参数,第一个参数是后面activity进入时的动画,第二个是前面的activity退出时的动画
                Intent intent = new Intent(AnimationActivity.this, MainActivity.class);
                startActivity(intent);
                overridePendingTransition(R.anim.alpha, R.anim.alphacopy);
            }
            break;
            case R.id.btn9: {
                //布局动画  实现ListView条目 散列效果
                Intent intent = new Intent(AnimationActivity.this, ListActivity.class);
                startActivity(intent);
            }
            break;


        }
    }
}

散列动画案例效果:

package com.example.tuhuadmin.truekeystore;

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

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

/**
 * Created by on 2016/7/5.
 * PackageName:com.example.tuhuadmin.truekeystore
 * Author:crs
 */

public class ListActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);

        initViews();
    }

    private void initViews() {
        ListView lv = (ListView) findViewById(R.id.lv);
        //准备数据
        List list = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            list.add("chenrushui" + i);
        }

        //创建并设置适配器
        ArrayAdapter myAdapter = new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1, list);
        lv.setAdapter(myAdapter);
        //创建布局动画   参数需要一个动画对象
        LayoutAnimationController layoutAnimationController = new LayoutAnimationController(AnimationUtils.loadAnimation(this, R.anim.layout_animation));
       //条目显示的顺序是可以定制的
        layoutAnimationController.setOrder(LayoutAnimationController.ORDER_RANDOM);
        //为ListView设置布局动画,并启动
        lv.setLayoutAnimation(layoutAnimationController);
        lv.startLayoutAnimation();
    }
}



你可能感兴趣的:(android开发中常见的几种动画)