通过Animator实现弧形弹出菜单
2015-09-22 13:08
323 查看
//布局文件 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/imageView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/b" /> <ImageView android:id="@+id/imageView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/c" /> <ImageView android:id="@+id/imageView4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/d" /> <ImageView android:id="@+id/imageView5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/e" /> <ImageView android:id="@+id/imageView6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/f" /> <ImageView android:id="@+id/imageView7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/g" /> <ImageView android:id="@+id/imageView8" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/h" /> <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/a" /> </FrameLayout>
效果图;
下面是JAVA代码;
package com.imooc.animator; import java.util.ArrayList; import java.util.List; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.app.Activity; import android.os.Bundle; import android.util.DisplayMetrics; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.BounceInterpolator; import android.widget.ImageView; import android.widget.Toast; public class ThirdActivity extends Activity implements OnClickListener { private int[] resId = { R.id.imageView1, R.id.imageView2, R.id.imageView3, R.id.imageView4, R.id.imageView5, R.id.imageView6, R.id.imageView7, R.id.imageView8 }; private List<View> imgList = new ArrayList<View>(); private boolean isStop = true; private int width; //转换成角度 double arc = Math.toRadians(15); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.animatorfortest); // 初始化控件 for (int i = 0; i < resId.length; i++) { ImageView imgView = (ImageView) findViewById(resId[i]); imgView.setOnClickListener(this); imgList.add(imgView); } // 获取屏幕宽度 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); width = dm.widthPixels; // 屏幕宽度; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.imageView1: if (isStop) { // 展开动画 startMyAnimation(); } else { // 收回动画 stopMyAnimation(); } break; default: Toast.makeText(ThirdActivity.this, "点击了:" + v.getId(), Toast.LENGTH_SHORT).show(); break; } } // 收回动画 private void stopMyAnimation() { for (int i = 1; i < imgList.size(); i++) { ObjectAnimator mAnimatorX = ObjectAnimator.ofFloat(imgList.get(i), "TranslationX", (float)((width/2)*Math.cos(arc*(i-1))),0F); ObjectAnimator mAnimatorY = ObjectAnimator.ofFloat(imgList.get(i), "TranslationY", (float)((width/2)*Math.sin(arc*(i-1))),0F); Log.i("lang", "[i="+i+"]X="+(float)((width/2)*Math.cos(arc*(i-1)))+",Y="+(float)((width/2)*Math.sin(arc*(i-1)))); AnimatorSet set = new AnimatorSet(); set.playTogether(mAnimatorX,mAnimatorY); set.setDuration(500); set.start(); isStop = true; } } // 展开动画 private void startMyAnimation() { for (int i = 1; i < imgList.size(); i++) { ObjectAnimator mAnimatorX = ObjectAnimator.ofFloat(imgList.get(i), "TranslationX", 0f,(float)((width/2)*Math.cos(arc*(i-1)))); ObjectAnimator mAnimatorY = ObjectAnimator.ofFloat(imgList.get(i), "TranslationY", 0f,(float)((width/2)*Math.sin(arc*(i-1)))); Log.i("lang", "[i="+i+"]X="+(float)((width/2)*Math.cos(arc*(i-1)))+",Y="+(float)((width/2)*Math.sin(arc*(i-1)))); AnimatorSet set = new AnimatorSet(); set.playTogether(mAnimatorX,mAnimatorY); set.setDuration(500); set.setInterpolator(new BounceInterpolator()); set.start(); isStop = false; } } }
模拟器效果
相关文章推荐
- Tarena - 飞机大战(六):碰撞检测
- ASM磁盘故障诊断
- qml学习------------------TabView
- Eclipse安装SVN插件
- LeetCode :: Insertion Sort List [具体分析]
- DOM注意事项(八):JavaScript操作环境和垃圾收集
- HDU-5461 Largest Point(沈阳网赛,最值)
- 提升SQLite数据插入效率低、速度慢的方法
- 【计算机网络】当输入URL后发生了什么
- 栈的压入、弹出序列
- 操作系统---------显示模式切换
- Centos重启网卡失败原因
- .stl文件(CAD三维模型)格式 及 基于C/C++的数据读取
- sed命令——流编辑器
- 数据库连接超时
- C# WinForm程序中使用Unity3D控件
- 访问者模式(5.11)之对象结构
- (算法)旋转有序数组中查找某个数
- VC6.0的定时器设计
- 调试