Day1菜单收拉

简述

简单描述实现收拉菜单的原理

1.添加控件

2.创建点击事件

3.实现点击效果


具体实现

Part 1

导入素材

首先,我们需要在project中导入图片素材作为菜单按钮的图案(直接将图片拖动或者复制到蓝色框即可

image

创建控件

控件在xml文件中编写

控件的行为在Java中编写

使用标签在软件上创建一个标签,在标签中可以设置此标签的属性

下面附上其中一个控件的代码


    

属性信息

id 作为此控件的识别信息,类似于学号用于识别控件个体

width和height作为控件的大小信息

src作为控件图片的原路径

HcenterHorizonta控件表示位于横线中心位置

onClicked表示发生点击事件之后跳转出来的效果//此处创建了一个点击事件,随后发生点击之后的效果

Tips:点击控件按钮A,出现菜单下拉的效果,点击出现的菜单按钮在未点击之前是被控件A所覆盖。之间的关系为层之间的关系。可以想象出一栋楼,楼顶为控件A。下面的楼层为出现的按钮。从上方观察便只能看到顶楼,也只能点击顶层。楼层之间上下关系便与创建控件先后顺序有关

Part 2

点击之后出现的效果在Java中编写

image
    public void imgClicked(View view) {
        if(isOpen == true){
            close();
        }
        else{
            open();
        }
        isOpen = !isOpen;
    }

思路:实现收拉菜单效果,我们可定义一个bool变量作为判断条件

使用if语句,其分支对应不同条件使用不同函数,每次执行完函数改变条件

初始条件设置为false

private void open(){
        for(int i = 1;i < imageViews.size(); i++)//不断取出控件
        {
            ImageView iv = imageViews.get(i);
            ObjectAnimator oa = ObjectAnimator.ofFloat(iv, "translationY", 0f, (i)*100);
//object T,direction,start_point, end_point(参数效果
            oa.setDuration(1000);//运动时间
            oa.setInterpolator(new BounceInterpolator());///回弹效果
            oa.start();//运动开始
        }
    }

但是一个随之出现 我们如何取出图片?

便需要之前添加的id属性 我们可以设置一个int数组来存储id(可通过一个函数将控件的id转换为一个数字,从而实现id的存储

private int[] resID = {R.id.iv_a, R.id.iv_b, R.id.iv_c, R.id.iv_d, R.id.iv_e, R.id.iv_f, R.id.iv_g};
    private List imageViews = new ArrayList<>();

此外,我们需要一个数组来存储我们的控件,通过id来取出控件

之前代码中的for循环便是不断的取出控件 实现运动 从而实现菜单的收拉
菜单的拉回只需改变运动轨迹参数即可

你可能感兴趣的:(Day1菜单收拉)