android——ObjectAnimator动画

来源:互联网 发布:webcrack软件下载 编辑:程序博客网 时间:2024/05/18 02:15
在新的android sdk中谷歌为我们提供了新的动画实现方式。化繁为简。将以前的animation动画进一步封装,使用起来更加方便。

先来看XML文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <LinearLayout        android:layout_width="match_parent"        android:orientation="horizontal"        android:layout_height="40dp" >        <ImageView            android:id="@+id/rect"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:background="@drawable/rect" />        <ImageView             android:id="@+id/star"            android:layout_width="60dp"            android:layout_height="match_parent"            android:background="@drawable/star"            />    </LinearLayout>    <ImageView        android:id="@+id/b"        android:layout_width="35dp"        android:layout_height="35dp"        android:layout_alignParentBottom="true"        android:layout_alignParentLeft="true"        android:layout_margin="10dp"        android:background="@drawable/b" />    <ImageView        android:id="@+id/c"        android:layout_width="35dp"        android:layout_height="35dp"        android:layout_alignParentBottom="true"        android:layout_alignParentLeft="true"        android:layout_margin="10dp"        android:background="@drawable/c" />    <ImageView        android:id="@+id/d"        android:layout_width="35dp"        android:layout_height="35dp"        android:layout_alignParentBottom="true"        android:layout_alignParentLeft="true"        android:layout_margin="10dp"        android:background="@drawable/d" />    <ImageView        android:id="@+id/e"        android:layout_width="35dp"        android:layout_height="35dp"        android:layout_alignParentBottom="true"        android:layout_alignParentLeft="true"        android:layout_margin="10dp"        android:background="@drawable/e" />    <ImageView        android:id="@+id/a"        android:layout_width="35dp"        android:layout_height="35dp"        android:layout_alignParentBottom="true"        android:layout_alignParentLeft="true"        android:layout_margin="10dp"        android:background="@drawable/a" /></RelativeLayout>

然后看看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 List<ImageView> listImg = new ArrayList<ImageView>();    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;        }    }}

 

0 0
原创粉丝点击