美文网首页
一个自定义的Textview点击可以展开

一个自定义的Textview点击可以展开

作者: 宁静世界 | 来源:发表于2017-03-15 15:19 被阅读0次

    需要自行准备两张图片资源

    Paste_Image.png
    public class ExpandableTextView extends TextView {
    private static int MIN_LINE_NUM = 2;
    private static int MAX_LINE_NUM = 20;
    private int lineNum = MIN_LINE_NUM;
    private boolean mIsExpanded = false;
    Drawable bitmapDown;
    Drawable bitmapUp;
    int w, h;
    /**
     * 点击事件listener
     */
    private OnClickListener mOnClickListener;
    
    public ExpandableTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context, attrs);
    }
    
    private void init(Context context, AttributeSet attrs) {
        setMaxLines(lineNum);
        bitmapDown = getResources().getDrawable(R.mipmap.down);
        bitmapUp = getResources().getDrawable(R.mipmap.up);
        bitmapDown.setBounds(0, 0, bitmapDown.getMinimumWidth(), bitmapDown.getMinimumHeight()); //设置边界
        bitmapUp.setBounds(0, 0, bitmapUp.getMinimumWidth(), bitmapUp.getMinimumHeight()); //设置边界
        super.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (lineNum == MIN_LINE_NUM) {
                    lineNum = MAX_LINE_NUM;
                    setMaxLines(lineNum);
                } else {
                    lineNum = MIN_LINE_NUM;
                    setMaxLines(lineNum);
                }
                if (mOnClickListener != null) {
                    mOnClickListener.onClick(v);
                }
            }
        });
    }
    
    @Override
    public void setOnClickListener(OnClickListener listener) {
        if (!isClickable()) {
            setClickable(true);
        }
        mOnClickListener = listener;
    }
    
    @Override
    public void setMaxLines(int maxlines) {
        super.setMaxLines(maxlines);
    
        if (lineNum == MAX_LINE_NUM) {
            mIsExpanded = true;
        } else {
            mIsExpanded = false;
        }
    }
    
    public boolean isExpanded() {
        return mIsExpanded;
    }
    
    @Override
    protected void onDraw(Canvas canvas) {
        if (getLineCount() <= MIN_LINE_NUM) {
            super.onDraw(canvas);
            return;
        }
        if (lineNum == MIN_LINE_NUM) {
            setCompoundDrawables(null, null, null, bitmapDown);
        } else {
            setCompoundDrawables(null, null,null , bitmapUp);
        }
        super.onDraw(canvas);
    }
    
    
    public void setMaxLine(int line) {
        lineNum = line;
        setMaxLines(line);
    }
    }
    

    效果如下

    展开前

    Paste_Image.png

    展开后

    Paste_Image.png

    相关文章

      网友评论

          本文标题:一个自定义的Textview点击可以展开

          本文链接:https://www.haomeiwen.com/subject/cvwlnttx.html