最简单的TextView伸缩效果

  场景:描述性文字很多的时候,需要隐藏一部分,点击展示全部时全部显示,在这里我提供一种最简单的方式,因为简单,所以用户体验不是很好,后面再说改进版。

    /**
     * 控制超过两行的文字隐藏和显示

     *@param textView 需要进行此项操作的 textView

     */
    private void setOpenOrCloseText(TextView  textView) {
        if (!flag) {    //  展开
            textView.setMaxLines(Integer.MAX_VALUE);
            mArrow.setImageResource(R.drawable.arrow_up);
            flag = true;
        } else {     //关闭
            textView.setMaxLines(2);   //最少需要显示的行数
            mArrow.setImageResource(R.drawable.arrow_down);
            flag = false;
        }
    }

  TextView初始行数可以自行在XML文件lines属性定义。定义一个布尔类型的flag记录当前是展开还是关闭状态,关闭状态点击设置TextView的MaxLines属性,这里的参数是Integer.MAX_VALUE,但是MaxLines属性最终是以实际行数为准。

  前面已经说了这是最简单的方式,并且只能针对TextView,用户体验会不好,因为当你一点击展开的时候,剩余的一下就弹出来了,没有过渡,所以感觉会很突兀。只是简单实现这种需求的可以采用此方法。

   下面说说用户体验好的方式,适用范围也更广,可以是单独的view,也可以是ViewGroup。使用值动画进行伸缩。

   在这里我就讲讲原理吧,代码什么的都不重要,不然也是复制粘贴,还是自己写写的好。

   同样也需要一个布尔类型的值记录当前的状态,根据不同的状态获得不同的初始高度和目标高度。以展开为例,初始高度是你想要从什么地方开始展开,目标高度是你想要展开到什么地方,这里提一点,如果你想展开到控件原始的高度,直接获取是做不到的,需要测量该控件的高度,核心方法是

  View.MeasureSpec.makeMeasureSpec(int size,int mode)  //用此方法得到控件的测量模式

  view.measure(int widthMeasureSpec,int heightMeasureSpec) //用此方法对控件进行测量 view为需要进行测量的控件对象

  经过这两个方法后就可以获得控件的实际高度了。

  获得高度后使用值动画的 ValueAnimator.ofInt(startHeight,targetHeight); //这个方法就是返回的从startHeight展开或者隐藏到targetHeight的值动画对象。

  对值动画设置更新监听,产生一个回调,回调方法里的对象里包含了动画执行时间高度值的变化,将此值以LayoutParams的方式设置给控件。

  最后设置值动画执行时间,就完成了控件平滑伸缩的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值