利用Android6.0新出的控件FloatingActionButton实现小球式弹出式菜单,再也不用导入复杂的第三方类库了!
下面看代码
android studio环境,首先导入
android.support.design.这个jar包, 上布局:<TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="圆形弹出菜单" android:textSize="28sp" /> <android.support.design.widget.FloatingActionButton android:id="@+id/bt1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_margin="20dp" android:src="@drawable/g" /> <android.support.design.widget.FloatingActionButton android:id="@+id/bt2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_margin="20dp" android:src="@drawable/t" android:visibility="gone" /> <android.support.design.widget.FloatingActionButton android:id="@+id/bt3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_margin="20dp" android:src="@drawable/f" android:visibility="gone" /> <android.support.design.widget.FloatingActionButton android:id="@+id/bt4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_margin="20dp" android:src="@drawable/y" android:visibility="gone" />布局很简单,就是在一个相对布局中定义了四个FloatingActionButton,具体写多少个button看你需求了,
最重要的是一定要让四个button重合,否则的话会在后面会很难控制动画的具体移动值,除了你想要一开始就显示在界面上的别button的就都隐藏了,
下面上具体代码://标记 小球执行的是那个动画 private boolean flag = true;private void initView() { FloatingActionButton bt1 = (FloatingActionButton) findViewById(R.id.bt1); final FloatingActionButton bt2 = (FloatingActionButton) findViewById(R.id.bt2); final FloatingActionButton bt3 = (FloatingActionButton) findViewById(R.id.bt3); final FloatingActionButton bt4 = (FloatingActionButton) findViewById(R.id.bt4); bt1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { buttonAnimatior(bt2, 6); buttonAnimatior(bt3, 3); buttonAnimatior(bt4, 2); } }); } //封装动画增强代码的复用 public void buttonAnimatior(final FloatingActionButton button, int x) { //获得设备屏幕的高度 Display display = MainActivity.this.getWindowManager().getDefaultDisplay(); int height = display.getHeight(); // int width=display.getWidth(); if (flag) { //让隐藏的小球显示 button.setVisibility(View.VISIBLE); ObjectAnimator animator = ObjectAnimator.ofFloat(button, "translationY", 0, -height / x).setDuration(2000); //加入动画插值器,增加效果 animator.setInterpolator(new OvershootInterpolator()); animator.start(); //flag的值一定要在动画结束时在改变,否则会使小球在同一次点击时执行的动画不同 animator.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animator) { } @Override public void onAnimationEnd(Animator animator) { flag = false; } @Override public void onAnimationCancel(Animator animator) { } @Override public void onAnimationRepeat(Animator animator) { } }); } else { ObjectAnimator animator = ObjectAnimator.ofFloat(button, "translationY", -height / x, 0).setDuration(2000); animator.start(); //给动画添加监听器 animator.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animator) { } @Override public void onAnimationEnd(Animator animator) { //动画结束时,小球回到原点,让小球隐藏 button.setVisibility(View.GONE); flag = true; } @Override public void onAnimationCancel(Animator animator) { } @Override public void onAnimationRepeat(Animator animator) { } }); } } 具体某个Button需要什么功能看你需要加就行了上面代码很简单,实现了以前需要第三方库才能实现的效果,本人都是把他封装成一个工具类来使用的,在需要用的时候直接传入button
调用就行,android6.0确实强大了许多,作为一个安卓开发者还是希望越做越好,越做越强大.