简述
简单描述实现收拉菜单的原理
1.添加控件
2.创建点击事件
3.实现点击效果
具体实现
Part 1
导入素材
首先,我们需要在project中导入图片素材作为菜单按钮的图案(直接将图片拖动或者复制到蓝色框即可
创建控件
控件在xml文件中编写
控件的行为在Java中编写
使用<ImageView>标签在软件上创建一个标签,在标签中可以设置此标签的属性
下面附上其中一个控件的代码
<ImageView
android:id="@+id/iv_a"
android:layout_width="75dp"
android:layout_height="75dp"
android:src="@mipmap/a"
android:layout_centerHorizontal="true"
android:onClick="imgClicked"
/>
属性信息
id 作为此控件的识别信息,类似于学号用于识别控件个体
width和height作为控件的大小信息
src作为控件图片的原路径
HcenterHorizonta控件表示位于横线中心位置
onClicked表示发生点击事件之后跳转出来的效果//此处创建了一个点击事件,随后发生点击之后的效果
Tips:点击控件按钮A,出现菜单下拉的效果,点击出现的菜单按钮在未点击之前是被控件A所覆盖。之间的关系为层之间的关系。可以想象出一栋楼,楼顶为控件A。下面的楼层为出现的按钮。从上方观察便只能看到顶楼,也只能点击顶层。楼层之间上下关系便与创建控件先后顺序有关
Part 2
点击之后出现的效果在Java中编写
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<ImageView> imageViews = new ArrayList<>();
此外,我们需要一个数组来存储我们的控件,通过id来取出控件
之前代码中的for循环便是不断的取出控件 实现运动 从而实现菜单的收拉
菜单的拉回只需改变运动轨迹参数即可