现在我需要像html标签一样实现一个函数,请参见下面的图片:
首先,我设置drawableLeft
,它显示如下:
这不是我的假设。之后我创建了一个类' LiTextView'实现TextView
,并覆盖onDraw()
方法,如下所示:
@Override
protected void onDraw(Canvas canvas) {
Drawable[] drawables = getCompoundDrawables();
if (drawables != null) {
Drawable drawableLeft = drawables[0];
if (drawableLeft != null) {
canvas.save();
canvas.translate(10, 50);
drawableLeft.draw(canvas);
canvas.restore();
}
}
super.onDraw(canvas);
}
像这样的xml文件:
<me.naiyu.android.textviewlidemo.widget.LiTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:drawableLeft="@drawable/circle_dot"
android:drawablePadding="10dp"
android:textColor="#000000"
android:textSize="18sp"
android:text="Displays text to the user and optionally allows them to edit it. A TextView is a complete text editor, however the basic class is configured to not allow editing"/>
它变成了这个(有两个圆圈):
我如何实现图片,我现在没有想法!
答案 0 :(得分:0)
两次绘制“点”的原因是因为你打电话给super.onDraw(canvas)
。你自己在顶部位置画了点,然后你让系统通过调用super来绘制原始位置上的点。
不幸的是, 要调用super.onDraw(canvas)
来绘制文字。实现所需目标的更好方法是创建一个包装要显示的Drawable的自定义Drawable
,然后覆盖自定义Drawable的draw(Canvas)
方法。
有关示例,请参阅my answer here。唯一的缺点是你必须从代码中设置drawableLeft
,而不是XML。