Android动画之属性动画Animator详解(卫星菜单)

今天详细看了一下Android属性动画,然后做了一个网上比较火的卫星菜单的demo,下面介绍一下卫星菜单的制作方法

这是截图



1、布局文件

<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.aniamtordemo.MainActivity" >
    
    <ImageView
        android:id="@+id/imageView3"
        android:onClick="myclick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="5dp"
        android:src="@drawable/composer_camera" />
    <ImageView
        android:id="@+id/imageView4"
        android:onClick="myclick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="5dp"
        android:src="@drawable/composer_music" />
    <ImageView
        android:id="@+id/imageView5"
        android:onClick="myclick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="5dp"
        android:src="@drawable/composer_place" />
    <ImageView
        android:id="@+id/imageView6"
        android:onClick="myclick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="5dp"
        android:src="@drawable/composer_sleep" />
    <ImageView
        android:id="@+id/imageView7"
        android:onClick="myclick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="5dp"
        android:src="@drawable/composer_thought" />
    <ImageView
        android:id="@+id/imageView8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="5dp"
        android:onClick="myclick"
        android:src="@drawable/composer_with" />
    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:src="@drawable/composer_button" />
    <ImageView
        android:id="@+id/imageView1"
        android:onClick="myclick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="15dp"
        android:layout_marginLeft="15dp"
        android:src="@drawable/composer_icn_plus" />

</RelativeLayout>

2、Mainactivity代码

package com.example.aniamtordemo;

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

import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.TypeEvaluator;
import android.animation.ValueAnimator;
import android.animation.ValueAnimator.AnimatorUpdateListener;
import android.graphics.PointF;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.animation.BounceInterpolator;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {

	private int[] imgs = { R.id.imageView3, R.id.imageView4, R.id.imageView5,
			R.id.imageView6, R.id.imageView7, R.id.imageView8 };
	private List<ImageView> imageViews;
	private boolean flag = true;
	private ImageView bt;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		bt = (ImageView) findViewById(R.id.imageView1);
		imageViews = new ArrayList<ImageView>();
		for (int i = 0; i < imgs.length; i++) {
			ImageView imageView = (ImageView) findViewById(imgs[i]);
			imageViews.add(imageView);
		}
	}

	public void myclick(View view) {
		switch (view.getId()) {
		case R.id.imageView1:
			if (flag) {
				open();
			} else {
				close();
			}
			break;
		case R.id.imageView3:
			if (flag == false) {
				Toast.makeText(getApplicationContext(), "这是第1张图",
						Toast.LENGTH_LONG).show();
				close();
			}

			break;
		case R.id.imageView4:
			if (flag == false) {
				Toast.makeText(getApplicationContext(), "这是第2张图",
						Toast.LENGTH_LONG).show();
				close();
			}
			break;
		case R.id.imageView5:
			if (flag == false) {
				Toast.makeText(getApplicationContext(), "这是第3张图",
						Toast.LENGTH_LONG).show();
				close();
			}
			break;
		case R.id.imageView6:
			if (flag == false) {
				Toast.makeText(getApplicationContext(), "这是第4张图",
						Toast.LENGTH_LONG).show();
				close();
			}
			break;
		case R.id.imageView7:
			if (flag == false) {
				Toast.makeText(getApplicationContext(), "这是第5张图",
						Toast.LENGTH_LONG).show();
				close();
			}
			break;
		case R.id.imageView8:
			if (flag == false) {
				Toast.makeText(getApplicationContext(), "这是第6张图",
						Toast.LENGTH_LONG).show();
				close();
			}
			break;
		}
	}

	public void open() {
		for (int i = 0; i < imageViews.size(); i++) {

			float x = (float) (Math.cos(i * (Math.PI / 2) / 5) * 300);
			float y = (float) (Math.sin(i * (Math.PI / 2) / 5) * 300);

			ObjectAnimator objectAnimator3 = ObjectAnimator.ofFloat(
					imageViews.get(i), "translationX", 0f, x);
			ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(
					imageViews.get(i), "translationY", 0f, y);
			ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(
					imageViews.get(i), "rotation", 0f, 360f);

			AnimatorSet animatorSet = new AnimatorSet();
			
			animatorSet.playTogether(objectAnimator1, objectAnimator2,
					objectAnimator3);
			animatorSet.setInterpolator(new BounceInterpolator());
			animatorSet.setDuration(500);
			animatorSet.setStartDelay(i*100);
			animatorSet.start();

		}
		ObjectAnimator.ofFloat(bt, "rotation", 0f, 45f).setDuration(500)
				.start();
		flag = false;
	}

	public void close() {
		for (int i = 0; i < imageViews.size(); i++) {
			float x = (float) (Math.cos(i * (Math.PI / 2) / 5) * 300);
			float y = (float) (Math.sin(i * (Math.PI / 2) / 5) * 300);

			ObjectAnimator objectAnimator3 = ObjectAnimator.ofFloat(
					imageViews.get(i), "translationX", x, 0f);
			ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(
					imageViews.get(i), "translationY", y, 0f);
			ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(
					imageViews.get(i), "rotation", 0f, 360f);

			AnimatorSet animatorSet = new AnimatorSet();
			animatorSet.playTogether(objectAnimator1, objectAnimator2,
					objectAnimator3);
			animatorSet.setInterpolator(new BounceInterpolator());
			animatorSet.setDuration(500);
			animatorSet.setStartDelay(i*100);
			animatorSet.start();
		}
		ObjectAnimator.ofFloat(bt, "rotation", 45f, 0f).setDuration(500)
				.start();
		flag = true;
	}
}

源码下载


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值