在新的android sdk中谷歌为我们提供了新的动画实现方式。化繁为简。将以前的animation动画进一步封装,使用起来更加方便。
先来看XML文件:
然后看看activity文件
package com.example.testanimator;import java.util.ArrayList;import java.util.List;import android.animation.ObjectAnimator;import android.animation.TimeInterpolator;import android.app.ActionBar;import android.app.Activity;import android.os.Bundle;import android.support.v4.view.animation.FastOutLinearInInterpolator;import android.view.MenuItem;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.animation.AccelerateDecelerateInterpolator;import android.view.animation.AccelerateInterpolator;import android.view.animation.AnticipateInterpolator;import android.view.animation.BounceInterpolator;import android.view.animation.CycleInterpolator;import android.widget.ImageView;import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener { private ImageView a, b, c, d, e; private int res[] = { R.id.a, R.id.b, R.id.c, R.id.d, R.id.e }; private ListlistImg = new ArrayList (); private boolean isStart = false; private float y; private float x; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { for (int i = 0; i < res.length; i++) { ImageView img = (ImageView) findViewById(res[i]); listImg.add(img); img.setOnClickListener(this); } x = listImg.get(0).getPivotX(); y = listImg.get(0).getPivotY(); } private void startAnimator() { isStart = true; for (int i = 0; i < listImg.size(); i++) { ObjectAnimator.ofFloat(listImg.get(i), "translationY", y, y - 400 + i * 100).setDuration(1000).start(); ObjectAnimator.ofFloat(listImg.get(i), "translationX", x, x + i * 100).setDuration(1000).start(); } } private void closeAnimator() { isStart = false; for (int i = 0; i < listImg.size(); i++) { ObjectAnimator animator = ObjectAnimator.ofFloat(listImg.get(i), "translationY", y - 400 + i * 100, y); animator.setDuration(1000); animator.setStartDelay(1000); animator.setInterpolator(new BounceInterpolator()); //设置插值器 animator.start(); } } @Override public boolean onTouchEvent(MotionEvent event) { float startx ,starty; float endx ,endy ; switch (event.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_MOVE: break; default: break; } return super.onTouchEvent(event); } @Override public void onClick(View v) { int id = v.getId(); switch (id) { case R.id.a: if (isStart) { closeAnimator(); //还原位置 } else { startAnimator(); //开始动画移动位置和焦点 } break; default: break; } }}