创建自定义edittext以在其中添加绘图的功能

时间:2016-05-26 12:12:11

标签: android android-edittext

我创建了自己的自定义edittext类,以便我可以在其中绘制并添加文本...

关于绘图部分一切正常,但是当我输入时,没有文字是可见的,,,,,,

我该如何解决这个问题

我的自定义视图

public class MyCustomView extends View
{

private Path drawPath;
//drawing and canvas paint
private Paint drawPaint, canvasPaint;
//initial color
private int paintColor = 0xFF660000;
//canvas
private Canvas drawCanvas;
//canvas bitmap
private Bitmap canvasBitmap;

private float brushSize ;

private boolean erase=false;


public MyCustomView(Context c, AttributeSet attr){
    super(c,attr);
    setupdraw();
}
 public MyEditText(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init();
}
private void setupdraw()
{
    drawPath = new Path();
    drawPaint = new Paint();

    brushSize = 15;


    drawPaint.setColor(paintColor);

    drawPaint.setAntiAlias(true);
    drawPaint.setStrokeWidth(brushSize);
    drawPaint.setStyle(Paint.Style.STROKE);
    drawPaint.setStrokeJoin(Paint.Join.ROUND);
    drawPaint.setStrokeCap(Paint.Cap.ROUND);

    canvasPaint = new Paint(Paint.DITHER_FLAG);



}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
//view given size

    super.onSizeChanged(w, h, oldw, oldh);

    canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
    drawCanvas = new Canvas(canvasBitmap);

}

@Override
protected void onDraw(Canvas canvas) {
//draw view

    canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
    canvas.drawPath(drawPath, drawPaint);

}

@Override
public boolean onTouchEvent(MotionEvent event) {
//detect user touch     
    float touchX = event.getX();
    float touchY = event.getY();

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            drawPath.moveTo(touchX, touchY);
            break;
        case MotionEvent.ACTION_MOVE:
            drawPath.lineTo(touchX, touchY);
            break;
        case MotionEvent.ACTION_UP:
            drawCanvas.drawPath(drawPath, drawPaint);
            drawPath.reset();
            break;
        default:
            return false;
    }

    invalidate();
    return true;
}

public void setColor(String newColor){
//set color     

    invalidate();

    paintColor = Color.parseColor(newColor);
    drawPaint.setColor(paintColor);
}

public void setBrushSize(float newSize){
//update size

    float pixelAmount = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
                                                  newSize, getResources().getDisplayMetrics());
    brushSize=pixelAmount;
    drawPaint.setStrokeWidth(brushSize);

}


}

  }

我的主要活动

public class MainActivity extends Activity 
{
private MyCustomView myView;




@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    MyCustomView myView = (MyCustomView) findViewById(R.id.myCustomView);

}
    }

main.xml中

<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:padding="10dp"
android:background="#D06C65">

<com.mycompany.myapp.MyCustomView
    android:id="@+id/myCustomView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#EAEAEA"/>

<Button
    android:layout_height="wrap_content"
    android:text="T"
    android:layout_width="wrap_content"
    android:layout_gravity="bottom|center"/>

</FrameLayout>

1 个答案:

答案 0 :(得分:1)

在绘制背景资料后,您应该致电super.onDraw(canvas) 。 TextView绘图方法随后将处理所有绘图文本功能(您不想重新编码)。

@Override
protected void onDraw(Canvas canvas) {

    canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
    canvas.drawPath(drawPath, drawPaint);
    super.onDraw(canvas);
}