Android 使用onDraw编辑具有自定义背景的文本

Android 使用onDraw编辑具有自定义背景的文本,android,android-edittext,Android,Android Edittext,我正在尝试使用自定义背景创建一个自定义EditText,这是使用可绘制的XML无法绘制的 这是我现在拥有的 public class EMEditText extends EditText { private Bitmap framedBitmap; public EMEditText(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-genera

我正在尝试使用自定义背景创建一个自定义EditText,这是使用可绘制的XML无法绘制的

这是我现在拥有的

public class EMEditText extends EditText {
    private Bitmap framedBitmap;

    public EMEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    @Override
    protected void onDraw(Canvas canvas) {
        if(framedBitmap == null) {
            createDrawable(getWidth(), getHeight());
        }

        Paint paint = new Paint();
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        // canvas.drawBitmap(framedBitmap, 0, 0, paint);
    }

    private void createDrawable(int width, int height) {
        // create a new bitmap of given size
        Bitmap start = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(start);

        RectF outerRect = new RectF(0, 0, width, height);

        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setColor(Color.WHITE);
        // paint.setStrokeWidth(1);
        // paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT));
        canvas.drawRoundRect(outerRect, height / 2, height / 2, paint);
        framedBitmap = start;
    }
}

代码中可能存在的错误是,您正在
createDrawable()
方法中创建自己的
Canvas
对象,尽管
onDraw()
方法为您提供了正确的
Canvas
,您应该将其用于绘图

因此,您可能需要将
createDrawable(int-width,int-height)
方法更改为
createDrawable(int-width,int-height,Canvas c)
。您的代码应该如下所示:

@Override
protected void onDraw(Canvas canvas) {
    if(framedBitmap == null) {
        createDrawable(getWidth(), getHeight(), canvas);
    }

    Paint paint = new Paint();
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    // canvas.drawBitmap(framedBitmap, 0, 0, paint);
}

private void createDrawable(int width, int height, Canvas c) {
    // create a new bitmap of given size
    Bitmap start = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    c.setBitmap(start);

    RectF outerRect = new RectF(0, 0, width, height);

    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    paint.setColor(Color.WHITE);
    // paint.setStrokeWidth(1);
    // paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT));
    c.drawRoundRect(outerRect, height / 2, height / 2, paint);
    framedBitmap = start;
}

如您所见,我还更改了
createDrawable()
方法的主体,使其使用
Canvas
from
onDraw()
并将其设置为
Bitmap
由您创建。

编译代码的结果是什么?背景不显示,是扭曲还是什么?