Android 实现Html Li标签效果

来源:互联网 发布:acrobat x pro mac 编辑:程序博客网 时间:2024/06/07 00:50
其实如果每条内容只有一行的话,用drawableLeft就可以实现了,问题是当有不止一行的情况下,这个drawableLeft是相对于整个TextView的高度居中的。
所有不能单纯的使用drawableLeft来显示。

我的做法是自定义一个Drawable,继承Drawable类,并重写onDraw方法


LiDrawable 

public class LiDrawable extends Drawable {    private Drawable mDrawable;    private int mLineHeight;    public LiDrawable(Drawable drawable, TextView tv) {        this.mDrawable = drawable;        this.mLineHeight = tv.getLineHeight();    }    @Override    public void draw(Canvas canvas) {        int halfCanvas= canvas.getHeight() / 2;        int halfDrawable = mDrawable.getIntrinsicHeight() / 2;        // TODO align to other positions;        canvas.save();        canvas.translate(0, -halfCanvas + halfDrawable + mLineHeight / 2);        mDrawable.draw(canvas);        canvas.restore();    }    @Override    public int getIntrinsicWidth() {        return mDrawable.getIntrinsicWidth();    }    @Override    public int getIntrinsicHeight() {        return mDrawable.getIntrinsicHeight();    }    @Override    public void setAlpha(int alpha) {    }    @Override    public void setColorFilter(ColorFilter cf) {    }    @Override    public int getOpacity() {        return 0;    }}
LiTextView 

public class LiTextView extends TextView {    private Drawable mDrawable;    private LiDrawable mLiDrawable;    public LiTextView(Context context) {        this(context, null);    }    public LiTextView(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    public LiTextView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        init(context, attrs);    }    private void init(Context context, AttributeSet attrs) {        TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.LiTextView, 0, 0);        try {            mDrawable = a.getDrawable(R.styleable.LiTextView_liDrawable);        } finally {            a.recycle();        }        setupLiDrawable();    }    private void setupLiDrawable() {        if (mDrawable != null) {            mLiDrawable = new LiDrawable(mDrawable, this);            mDrawable.setBounds(0, 0, mDrawable.getIntrinsicWidth(), mDrawable.getIntrinsicHeight());            mLiDrawable.setBounds(0, 0, mDrawable.getIntrinsicWidth(), mDrawable.getIntrinsicHeight());            setCompoundDrawables(mLiDrawable, null, null, null);        }    }    public void setLiDrawable(Drawable drawable) {        this.mDrawable = drawable;        setupLiDrawable();    }    public void setLiDrawableResource(int drawableRes) {        this.mDrawable = getResources().getDrawable(drawableRes);        setupLiDrawable();    }}




0 0
原创粉丝点击