ObjectAnimator的使用

ObjectAnimator是属性动画中一个很重要的类,它是继承自ValueAnimator的。通过ObjectAnimator的静态工厂方法可以创建一实例。可以调用一系列的重载的方法来完成动画的使用。
这里通过这些代码完成一个点击一张图片弹出所有图片

ObjectAnimator可以在代码中实现也可以通过xml

ObjectAnimator的使用_第1张图片


<RelativeLayout       xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="5dp"
    android:paddingRight="5dp"
    android:paddingTop="5dp">

    <ImageView
        android:id="@+id/image07"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="5dp"
        android:paddingTop="10dp"
        android:src="@mipmap/mrocket" />

    <ImageView
        android:id="@+id/image06"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="5dp"
        android:paddingTop="10dp"
        android:src="@mipmap/mbatterylow" />

    <ImageView
        android:id="@+id/image05"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="5dp"
        android:paddingTop="10dp"
        android:src="@mipmap/mchat" />

    <ImageView
        android:id="@+id/image04"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="5dp"
        android:paddingTop="10dp"
        android:src="@mipmap/mgamecontroller" />

    <ImageView
        android:id="@+id/image03"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="5dp"
        android:paddingTop="10dp"
        android:src="@mipmap/mmusic" />

    <ImageView
        android:id="@+id/image02"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="5dp"
        android:paddingTop="10dp"
        android:src="@mipmap/mart" />

    <ImageView
        android:id="@+id/image01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/msettings" />

RelativeLayout>
package com.example.myscan;

import android.animation.ObjectAnimator;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.BounceInterpolator;
import android.widget.ImageView;
import android.widget.Toast;

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

/**
 * Created by Administrator on 2016/8/20.
 */
public class MyAnimator extends Activity implements View.OnClickListener {
    /**
     * 存放图片资源的数组
     */
    private int[] img = new int[]{R.id.image01, R.id.image02, R.id.image03,
            R.id.image04, R.id.image05, R.id.image06, R.id.image07};

    private List list = new ArrayList<>();//存放ImageView的集合
    private boolean temp = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_animator);
        /**
         * 初始化数据并绑定
         */
        for (int i = 0; i < img.length; i++) {
            ImageView image = (ImageView) findViewById(img[i]);
            image.setOnClickListener(this);
            list.add(image);
        }
    }

    /**
     * ImageView 的点击事件
     *
     * @param view
     */
    @Override
    public void onClick(View view) {

        switch (view.getId()) {
            case R.id.image01://当点击第一张的时候,触发动画,让其他的图片显示出来
                if (temp) {//如果temp我true的话,就开始出现图片
                    initAnimator();
                } else {
                    closeAnimator();//否则就收回这些图片
                }
                break;
            default:
                Toast.makeText(MyAnimator.this,"点击"+view.getId(),Toast.LENGTH_SHORT).show();
                break;
        }
    }

    /**
     * 收回图片
     */
    private void closeAnimator() {
        for (int i = 1; i < img.length; i++) {
            ObjectAnimator animator = ObjectAnimator.ofFloat(list.get(i), "translationY", i * 150, 0);
            animator.setDuration(300);
            animator.setInterpolator(new BounceInterpolator());
            animator.setStartDelay(i * 300);
            animator.start();
            temp=true;
        }
    }

    /**
     * 打开动画效果
     */
    private void initAnimator() {
        for (int i = 1; i < img.length; i++) {
            ObjectAnimator animator = ObjectAnimator.ofFloat(list.get(i), "translationY", 0, i * 150);
            animator.setDuration(300);
            animator.setInterpolator(new BounceInterpolator());
            animator.setStartDelay(i * 300);
            animator.start();
            temp = false;//此时将temp设置为false,则下次再次点击时,就会触发收回图片的动作
        }
    }
}

你可能感兴趣的:(Android学习)