2016-10-25 1 views
1

Ich machte canvas view transparent und code folgt;radiergummi funktioniert nicht auf transparenter leinwand view android

protected void onDraw(Canvas canvas) { 

super.onDraw(canvas); 
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.OVERLAY); 
} 

Der folgende Code für Radiergummi und seine nicht

if (this.mode == Mode.ERASER) { 
// Eraser 
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); 
paint.setARGB(0, 255, 0, 0); 
paint.setColor(eraserColor); 
paint.setStrokeWidth(DrawingActivity.eraserSize); 
} 

Antwort

0

hier zu arbeiten ist voll Code. Versuch es.

public class TryDraw extends View { 

    private Path drawPath; 
    private Paint drawPaint; 
    private Paint canvasPaint; 
    private Canvas drawCanvas; 
    public static Bitmap canvasBitmap; 
    private boolean erase=false; 
    float touchX; 
    float touchY; 
    float strokeWidth; 

    public TryDraw(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public void setupDrawing(){ 

     strokeWidth=getResources().getDimension(R.dimen.medium_brush); 
     drawPath = new CustomPath(); 
     drawPaint = new Paint(Paint.ANTI_ALIAS_FLAG|Paint.DITHER_FLAG); 
     drawPaint.setColor(Color.RED); 
     drawPaint.setAntiAlias(true); 
     drawPaint.setStrokeWidth(strokeWidth); 
     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) { 
     super.onSizeChanged(w, h, oldw, oldh); 
     canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 
     drawCanvas = new Canvas(canvasBitmap); 
     drawCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.OVERLAY); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.drawBitmap(canvasBitmap,0,0, canvasPaint); 
     canvas.drawPath(drawPath, drawPaint); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 

     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       drawPath.moveTo(event.getX(),event.getY()); 
       touchX = event.getX(); 
       touchY = event.getY(); 
       drawPath.lineTo(touchX,touchY); 

       break; 
      case MotionEvent.ACTION_MOVE: 
       drawPath.lineTo(event.getX(), event.getY()); 
       touchX = event.getX(); 
       touchY = event.getY(); 

       break; 
      case MotionEvent.ACTION_UP: 
       drawCanvas.drawPath(drawPath, drawPaint); 
       drawPath=new Path(); 
       break; 
      default: 
       return false; 
     } 
     invalidate(); 
     return true; 

    } 

    public void setColor(int newColor){ 
     invalidate(); 
     drawPaint.setColor(newColor); 
    } 

    public void setErase(boolean isErase){ 
     if(!isErase) { 
      drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); 
      drawPaint.setStrokeWidth(45.0f); 
      erase=true; 
     }else { 
      drawPaint.setXfermode(null); 
      drawPaint.setStrokeWidth(strokeWidth); 
      erase=false; 
     } 
    } 

    public void startNew(){ 
     mDrawingList.clear(); 
     drawCanvas.drawColor(0, PorterDuff.Mode.CLEAR); 
     invalidate(); 
    } 

} 
+0

hey Divyesh danken für diese, aber es funktioniert nicht, Radiergummi auf transparente Leinwand zeigen schwarze Farbe entweder Reinigung :(Sie bitte definieren, was ‚Splas‘ ist –

+0

Splash ist nur eine andere Aktivität. Ich pflegte, statische Variable Zeichne entweder Strich oder Strichlinie, und dieser Code funktioniert korrekt, diese schwarze Linie zeigt nur, in welchem ​​Bereich du löschst –

+0

danke Divyesh :) folgendem Link hilf mir auch: https://github.com/SueSmith/android -drawing-app/blob/master/src/com/beispiel/zeichnungsfun/DrawingView.java –

Verwandte Themen