目的
实现点击页面的按钮,可以弹开菜单,再点击一下菜单收回。
实际操作
创建新的project
将资源图片拖到mipmap里
在xml里配置界面并且设置id号

07282.png
其他bcdefg以类似代码编辑
图片a是最外层图片,相当于按钮,我们要点击它才能弹出相应的菜单
因此用onclick实现

07283.png
一开始imgClicked有红线表示为实现 按alt+enter Create"imgClicked(View)'....
将转移到mainactivity

图片发自简书App
获取xml里面的所有图片视图
先用一个数组保存所有视图的id号
用一个数组保存所有id号对应的视图
private int[] resID = {R.id.iv_b,R.id.iv_c,R.id.iv_d,R.id.iv_e,R.id.iv_f,R.id.iv_g,R.id.iv_h};
private List<ImageView> imageViews = new ArrayList<>();
定义一个变量 记录按钮的状态 isOpen
private boolean isOpen = false;
将id号对应图片视图读取出来 放到ImageViews里面
for (int i = 0;i < resID.length; i ++){
int id = resID[i];
ImageView img = findViewById(id);
imageViews.add(img);
}-
判断按钮打开or关闭
public void imgClicked(View view) {
if (isOpen == true){
//应该关闭 收回列表
close();
}else {
//应该打开 展开列表
open();
}
isOpen = !isOpen;
自己定义一个方法写动画
private void close(){
for (int i = 0;i < imageViews.size();i++){
ImageView iv = imageViews.get(i);
ObjectAnimator oa = ObjectAnimator.ofFloat(iv,"translationY",(i+1)*120f,0f);
oa.setDuration(1000);
oa.start();
}
}
private void open(){
for (int i = 0;i < imageViews.size();i++){
//取出一个图片视图
ImageView iv = imageViews.get(i);
//给这个视图添加移动动画
ObjectAnimator oa = ObjectAnimator.ofFloat(iv,"translationY",0f,(i+1)*80f);
oa.setDuration(1000);
oa.setInterpolator(new BounceInterpolator());
oa.start();
}