Android 显示/隐藏 布局(非visibility进行控制)

今天一小伙伴遇到这样的一个需求,点击隐藏布局再点击显示出来.
这里写图片描述

我想大部分的新手可能想到的就是点击之后直接

 android:visibility="gone"

然后发现一点也没有反应,然后沉浸在纠结之中….

需求分析
点击之后,有拉伸有收缩的效果,很明显这个是动画.不能采用 android:visibility=”gone”的形式去做

第一步
要测量完整展示的高度也就是收缩/拉伸布局的高度
这layout 是拉伸/收缩的布局

private int getLongHeight() {
        layout.measure(0, 0);
        return layout.getMeasuredHeight();
    }

第二步
我还要知道不展示的时候的高度(最小值) 在这里是为0

 layoutParams = layout.getLayoutParams();
        layoutParams.height = 0;
        layout.setLayoutParams(layoutParams);

第三步
开始设置动画
首先需要一个布尔类型的值来判断是拉伸还是收缩

 private boolean isOpen = false;

在点击事件中我们设置一个方法

 private void expend() {
        ValueAnimator valueAnimator = null;
        if (!isOpen){
            //点击前是关闭状态,点击后就扩展拉开
            isOpen = true;
            valueAnimator = ValueAnimator.ofInt(0, getLongHeight());
        }else{
            //点击前是开启状态,点击后就缩回去
            isOpen = false;
            valueAnimator = ValueAnimator.ofInt(getLongHeight(), 0);
        }
        if (valueAnimator != null) {
            valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator valueAnimator) {
                    int height = (Integer) valueAnimator.getAnimatedValue();
                    layoutParams.height = height;
                    layout.setLayoutParams(layoutParams);
                }
            });
            //这个是监听动画运行状态的
            valueAnimator.addListener(new Animator.AnimatorListener() {
                @Override
                public void onAnimationStart(Animator animation) {

                }

                @Override
                public void onAnimationEnd(Animator animation) {
                    if (isOpen){
                        //扩展开箭头向上
                        img_k1.setImageResource(R.mipmap.icon_c);
                    }else{
                        //收缩时候向下
                        img_k1.setImageResource(R.mipmap.icon_k);
                    }
                }

                @Override
                public void onAnimationCancel(Animator animation) {

                }

                @Override
                public void onAnimationRepeat(Animator animation) {

                }
            });
        }
        valueAnimator.setDuration(100);
        valueAnimator.start();
    }

注意 一定要设置时长 还有开启动画,不然你的界面也是没有效果的
这里写图片描述

2017年5月10日00:54:12

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值