美文网首页
Android开发中控件动画实现

Android开发中控件动画实现

作者: 黑铁选手 | 来源:发表于2019-09-23 17:03 被阅读0次

目的

实现点击一个控件按照一定规律弹出其他控件


QQ图片20190923163850.jpg

相关技术、及其使用

1、以RelativeLayout为父容器,分别添加ImageButton,把所需要操作的控件添加到界面上,并添加对应的id

 <ImageButton
        android:id="@+id/ib_e"
        style="@style/ManuBtnStyle"
        android:src="@drawable/e"/>

    <ImageButton
        android:id="@+id/ib_d"
        style="@style/ManuBtnStyle"
        android:src="@drawable/d"/>

    <ImageButton
        android:id="@+id/ib_c"
        style="@style/ManuBtnStyle"
        android:src="@drawable/c"/>

    <ImageButton
        android:id="@+id/ib_b"
        style="@style/ManuBtnStyle"
        android:src="@drawable/b"/>

    <ImageButton
        android:id="@+id/ib_a"
        style="@style/ManuBtnStyle"
        android:src="@drawable/a"/>

2、定义initView()方法,判断当前取出的按钮状态(关闭或者开启)

private void initView() {
        ImageButton menu = findViewById(R.id.ib_a);
        menu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //遍历数组  取出每一个按钮
                for(int i = 0 ;i < resId.length; i++){
                    //判断当前所处的状态 打开还是关闭
                    if(isOpen == true){
                        //之前是打开,现在需要关闭
                        close(i);
                    }else {
                        //之前是关闭的,现在需要打开
                        open(i);
                    }
                }
                isOpen = !isOpen;
            }
        });
    }

3、写一个animate方法来实现动画效果
平分之后两者之间的角度:

//计算平分之后的两个之间的角度
        double angle = (float) (Math.PI) / (resId.length + 1);
        ImageButton ib = findViewById(resId[i]);

通过id获取对应的控件然后计算当前控件所处的位置

 //获取id对应控件
        //计算当前控件对应的角度
        double mangle = (i + 1) * angle;

        //计算x距离
        float x = (float) (Math.cos(mangle) * 400);

        //计算y距离
        float y = (float) (Math.sin(mangle) * 400);

通过创建一个AnimationSet集合来包裹移动和旋转动画,然后开启动画

 //移动的动画
        TranslateAnimation tAnim = new TranslateAnimation(startx,tox,starty,toy);
        tAnim.setDuration(500);
        tAnim.setInterpolator(interpolator);

        //旋转动画
        RotateAnimation rAnim = new RotateAnimation(0, 360 * 3,
                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF
                , 0.5f);
        rAnim.setDuration(500);

        //创建一个AnimationSet集合 包裹多个动画
        AnimationSet set = new AnimationSet(false);
        set.setFillAfter(true);
        set.addAnimation(rAnim);
        set.addAnimation(tAnim);

        //开始动画
        ib.startAnimation(set);

PS

这个小demo中,学到了当一个控件的多个属性相同时,可以直接创建一个style,方法来管理这些属性,或者实现相应的功能,进一步的控件动画的熟悉和掌握,其中新学到了AnimationSet方法来包裹一个控件的多个动画。

相关文章

网友评论

      本文标题:Android开发中控件动画实现

      本文链接:https://www.haomeiwen.com/subject/ypcmuctx.html