最简单的代码实现小球式弹出菜单

利用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确实强大了许多,作为一个安卓开发者还是希望越做越好,越做越强大.

  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值