0

我已经扩展了课程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);}
4

2 回答 2

2

我运行了您的代码,然后立即出现Lint错误。在init()你设置你的mTextPaintto android.R.color.black。因为它是一个静态值,我可以立即看到该int变量的实际值为0x0106000c,这几乎是完全透明的。你应该使用getResources().getColor(android.R.color.black)or plain ol' Color.BLACK

请注意,textSize12 的 a 非常非常小。此代码显示 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在我的屏幕上看到了。

于 2012-12-20T14:19:41.400 回答
-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="..."
    />
于 2012-12-20T13:54:08.533 回答