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

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

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,242评论 25 708
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,229评论 4 61
  • 许浑《谢亭送别》原诗、注释、翻译、赏析 【原诗】:谢亭送别许浑劳歌一曲解行舟,红叶青山水急流。日暮酒醒人已远,满天...
    xcy无名阅读 426评论 0 0
  • 中态3万会员1.3万购车方案! 广汽传祺GA3S自动挡1.5排量豪华型,️万中态会员+1.3万新车开回家!0月供!...
    正能量张总阅读 158评论 0 0
  • 根据我对减肥事业的反复研究和亲身经历,终于找到了通往减肥成功之路的两招,十分简单,分别是“刻意练习”和“持续实践”...
    117他爸阅读 2,297评论 25 30