Android 使用onDraw编辑具有自定义背景的文本
我正在尝试使用自定义背景创建一个自定义EditText,这是使用可绘制的XML无法绘制的 这是我现在拥有的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
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
fromonDraw()
并将其设置为Bitmap
由您创建。编译代码的结果是什么?背景不显示,是扭曲还是什么?