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相关文章推荐
- Gifski:一个跨平台的高质量 GIF 编码器
- 模仿动画的放大缩小容器
- jQuery实现美观的多级动画效果菜单代码
- php判断GIF图片是否为动画的方法
- jQuery实现动画效果circle实例
- 浅析JavaScript动画
- js排序动画模拟-插入排序
- javascript+HTML5的Canvas实现Lab单车动画效果
- js实现按钮颜色渐变动画效果
- jQuery实现带有洗牌效果的动画分页实例
- jquery实现先淡出再折叠收起的动画效果
- jQuery使用animate创建动画用法实例
- jquery带动画效果幻灯片特效代码
- jQuery实现带动画效果的多级下拉菜单代码
- jQuery动画特效实例教程
- JQuery动画和停止动画实例代码
- 基于jquery css3实现点击动画弹出表单源码特效
- JQuery动画与特效实例分析
- Jquery 自定义动画概述及示例
- 基于jquery的动画效果代码