在ImageView上绘制文本不起作用

时间:2012-12-20 13:26:42

标签: android

我从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);}

2 个答案:

答案 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="..."
    />