属性动画实现的扇形菜单效果,超级简单。直接上图上干货。

Android 属性动画实现的扇形菜单效果_第1张图片

Android 属性动画实现的扇形菜单效果_第2张图片

代码MainActivity:

package com.daidai.sectormenu;import java.util.ArrayList;import java.util.List;import android.animation.AnimatorSet;import android.animation.ObjectAnimator;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.os.Bundle;import android.view.KeyEvent;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageView;import android.widget.Toast;public class MainActivity extends Activity implements OnClickListener{private int[] res = {R.id.iv_open, R.id.iv_camera, R.id.iv_music, R.id.iv_place, R.id.iv_sleep, R.id.iv_thought, R.id.iv_with};private List imageViewList = new ArrayList();private boolean isOpen = false;//菜单是否打开状态private final int r = 300;//扇形半径private float angle;//按钮之间的夹角private final long intervalTime = 100; //菜单展开的时间间隔@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initImageView();//计算按钮之间的夹角angle=(float)Math.PI/(2*(res.length-1));}/** * 初始化View */private void initImageView(){ImageView imageView = null;for(int i = 0; i < res.length; i++){imageView = (ImageView) findViewById(res[i]);imageView.setOnClickListener(this);imageViewList.add(imageView);}}/** * 点击事件 */@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.iv_open:if(isOpen){closeAnim();}else{startAnim();}break;default:Toast.makeText(MainActivity.this, ""+view.getId(), Toast.LENGTH_SHORT).show();break;}}/** * 展开菜单 */private void startAnim(){ObjectAnimator animatorX = null;ObjectAnimator animatorY = null;float translationX ;//横坐标偏移距离float translationY ;//纵坐标偏移距离for(int i = 1; i < res.length; i++){translationX = (float) (r*Math.sin(i*angle));translationY = (float) (r*Math.cos(i*angle));animatorX = ObjectAnimator.ofFloat(imageViewList.get(i),"translationX", 0F, translationX);animatorY = ObjectAnimator.ofFloat(imageViewList.get(i),"translationY", 0F, translationY);AnimatorSet animSet = new AnimatorSet();animSet.playTogether(animatorX, animatorY);animSet.setDuration(i * intervalTime);animSet.start();}isOpen = true;}/** * 关闭菜单 */private void closeAnim(){ObjectAnimator animatorX = null;ObjectAnimator animatorY = null;float translationX ;//横坐标偏移距离float translationY ;//纵坐标偏移距离for(int i = res.length - 1; i > 0; i--){translationX = (float) (r*Math.sin(i*angle));translationY = (float) (r*Math.cos(i*angle));animatorX = ObjectAnimator.ofFloat(imageViewList.get(i),"translationX", translationX, 0F);animatorY = ObjectAnimator.ofFloat(imageViewList.get(i),"translationY", translationY, 0F);AnimatorSet animSet = new AnimatorSet();animSet.playTogether(animatorX, animatorY);animSet.setDuration((res.length - i) * intervalTime);animSet.start();}isOpen = false;}/** * 监听是否按下返回键 */public boolean onKeyDown(int keyCode, KeyEvent event){//如果按下返回键,执行退出操作if(keyCode == KeyEvent.KEYCODE_BACK){showDialog();}return super.onKeyDown(keyCode, event);}/** * 退出弹框 */private void showDialog(){new AlertDialog.Builder(this).setTitle("退出").setMessage("要退出么?").setNegativeButton("退出", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface arg0, int arg1) {finish();}}).setPositiveButton("返回", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface arg0, int arg1) {}}).show();}}

   

布局activity_main.xml:

                                                            

本人是一名Java开发人员,初次涉及Android开发,希望大家能多多指点。

同时附上源码下载以供参考:http://pan.baidu.com/s/1qWDi0ri

更多相关文章

  1. Android SlidingMenu 开源项目 侧拉菜单的使用(详细配置)
  2. 优酷自定义菜单功能学习
  3. android按Menu出现菜单的动画
  4. Android第四十七期 - WheelView沉浸式菜单栏
  5. Android使用TabLayout+ViewPager实现顶部滑动菜单栏
  6. Android TabHost实现新浪微博菜单界面
  7. android 独立按键和菜单键 打开menu
  8. Android分享一款漂亮的折叠书架菜单
  9. Android实现底部导航菜单的跳转--BottomNavigationView

随机推荐

  1. Android(安卓)SharedPreferences使用
  2. Android(安卓)System.gc()注意点
  3. 【转】如何获取Android系统时间是24小时
  4. Android(安卓)命令行签名打包,加固二次打
  5. 短视频带货源码模仿QQ 测滑菜单
  6. android通过反射来获取系统属性SystemPro
  7. Android(安卓)app 判断是手机还是平板
  8. android Bitmap用法总结
  9. Android之SurfaceView(一)
  10. Android(安卓)使用 array.xml