我从ImageView
扩展了课程,并希望在其上绘制一些文字。这不起作用,你知道为什么吗?谢谢。
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int imgWidth = getMeasuredWidth();
int imgHeight = getMeasuredHeight();
float txtWidth = mTextPaint.measureText("your text");
int x = Math.round(imgWidth/2 - txtWidth/2);
int y = imgHeight/2 - 6; // 6 is half of the text size
canvas.drawText("your text", x, y, mTextPaint);
}
private void init(Context context, AttributeSet attrs, int defStyle) {
mTextPaint = new Paint();
mTextPaint.setColor(android.R.color.black);
mTextPaint.setTextSize(12);
mTextPaint.setTextAlign(Paint.Align.LEFT);}
答案 0 :(得分:2)
我运行了您的代码,并立即收到Lint
错误。在init()
,您将mTextPaint
设置为android.R.color.black
。因为它是静态值,我可以立即看到该变量的实际int
值为0x0106000c
,几乎完全透明。您应该使用getResources().getColor(android.R.color.black)
或普通“Color.BLACK
。
请注意,textSize
为12非常非常小。此代码显示12(尽管非常小)。
public class MyImageView extends ImageView {
public MyImageView(Context context, AttributeSet attributeSet, int defStyle) {
super(context, attributeSet, defStyle);
init();
}
public MyImageView(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
init();
}
public MyImageView(Context context) {
super(context);
init();
}
Paint mTextPaint;
private void init() {
mTextPaint = new Paint();
mTextPaint.setColor(Color.BLACK);
mTextPaint.setTextSize(12);
mTextPaint.setTextAlign(Paint.Align.LEFT);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int imgWidth = getMeasuredWidth();
int imgHeight = getMeasuredHeight();
float txtWidth = mTextPaint.measureText("your text");
int x = Math.round(imgWidth/2 - txtWidth/2);
int y = imgHeight/2 - 6;
canvas.drawText("12", x, y, mTextPaint);
}
}
的xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.example.mytest.MyImageView
android:layout_width="100dp"
android:layout_height="100dp"/>
</RelativeLayout>
复制/粘贴,如果问题仍然存在,请开始记录。再次,这段代码有效,我在屏幕上看到12
。
答案 1 :(得分:-1)
你应该能够在不创建自己的课程的情况下完成欲望效果。只需使用可绘制的图像设置TextView的背景。请参阅我的示例,其中包含一个讲话泡泡中的文字。
<TextView
android:id="@+id/textOverImage"
android:background="@drawable/speech_bubble"
android:text="@string/hello_world"
android:gravity="center"
android:layout_width="..."
android:layout_height="..."
/>