可收缩的TextView

本文介绍了如何实现一个可收缩的TextView,包括分析实现思路、确定所需变量、编写代码及XML布局,通过自定义属性动画实现展开和收缩的效果,并提供了GitHub源码链接。
摘要由CSDN通过智能技术生成

可收缩的TextView

1.上来不啰嗦效果图如下:

这里写图片描述


如上图所示,我们项目中有时候需求这种效果。那么今天我们一起来实现这样一个东西把。

2.我们来分析如何实现:

  • 如图我们可以看出是一个容器包裹着两个控件,文字TextView控件和另外一个随便的可点击控件,在点击之后我们可以看出有动画效果,而且有默认的初始行数和高度,以及展开的高度和行数等。所以接下来我们来自定义自己的容器。

3.确定容器布局所需变量

  • 首先我们分析我们这个容器布局所需要的变量:
  • 1:显示内容的控件。TextView visible_context_tv;
  • 2:可点击控件。TextView button_expand_tv;
  • 3 :展开后允许显示的最大行数:int maxExpandLines;
  • 4 :动画的时间:int animal_duration;
  • 5 :来个标记记录文字是否发生了变动:flag_isChang=false;
  • 6 :没有展开时候的TextView的高度:shrinkageHeight=0;
  • 7 :判断是否在执行动画:boolean isAnimate=false;
  • 8:我们需要定义一个接口来监听我们的容器布局展开收缩的状态:
    ExpandStateListener expandStateListener;

4.开始撸代码了
首先来定义一个类CanExpandTextView继承LinearLayout或者其他容器布局,我们由于TextView内容控件和点击控件都是上下排列,我们就继承LinearLayout代码如下:

import android.content.Context;
import android.content.res.TypedArray;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.widget.LinearLayout;
import android.widget.TextView;
/**
 * Created by Administrator on 2017/9/5/005.
 */
public class CanExpandTextView extends LinearLayout {
   
    //- 1:显示内容的控件。TextView visible_context_tv;
    private TextView visible_context_tv;
    //- 2:可点击控件。TextView button_expand_tv;
    private TextView button_expand_tv;
    // - 3 :展开后允许显示的最大行数:
    int maxExpandLines;
    //- 4 :动画的时间:
    int animal_duration;
    //- 5 :来个标记记录文字是否发生了变动:
    boolean flag_isChang = false;
    //- 6 :没有展开时候的TextView的高度:
    int shrinkageHeight = 0;
    //- 7 :判断是否在执行动画:
    boolean isAnimate = false;
    //- 8:我们需要定义一个接口来监听我们的容器布局展开收缩的状态:
    ExpandStateListener expandStateListener;
    public CanExpandTextView(Context context) {
        super(context);
    }
    public CanExpandTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        //初始化我们所需要的属性
        init(context,attrs);
    }
    /***
     * 这里我们来实现自定义的属性
     * @param context
     * @param attrs
     */
    private void init(Context context, AttributeSet attrs) {
        //首先设置容器布局的方向:竖直的
        setOrientation(VERTICAL);
        /**这里我们需要自定义属性:这里我我们都知道,刚接触android的
        可以去自己去看看自定义属性:**/
        TypedArray typedArray=context.obtainStyledAttributes
        (attrs,R.styleable.ExpandParames);
        /**初始TextView显示字体行数:这里注意了默认的最大展开能允许显示
          的text行数可以这里设置也可以咋布局中设置的**/
        //我就在布局中设置,相当高大上
        maxExpandLines=typedArray.getInteger(R.styleable.
        ExpandParames_max_expend_lines,0);
        /**这里设置动画执行的时间长度,同样可在布局xml中折花枝也可以在这里设置。
        我就在xml中设置了**/
        animal_duration=typedArray.getInteger(R.styleable.\
        
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值