您的位置:首页 > 移动开发 > Android开发

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

2015-09-29 14:27 721 查看

今天详细看了一下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;
}
}


源码下载

http://download.csdn.net/download/jl_stone/9147239
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息