2016-10-25 29 views
1

キャンバスビューを透明にしてコードを作成しました。透明キャンバスビューでは消しゴムが動作しないandroid

protected void onDraw(Canvas canvas) { 

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

消しゴムとそのここ

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); 
} 

答えて

0

を動作していないため、次のコードは、完全なコードです。それを試してみてください。 。私が静的変数を使用し

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

ちょっとDivyeshは、このために感謝し、透明キャンバス上の消しゴムは黒い色のいずれかのクリーニングを示し、動作しない:(あなたは「Splas」 –

+0

スプラッシュはちょうど別の活動であるかを定義してくださいすることができますこのコードは正しく動作していますが、黒い線が消している領域を示しています。 –

+0

Divyeshありがとうございました 次のリンクも参照してください: https://github.com/SueSmith/android -drawing-app/blob/master/src/com/example/drawingfun/DrawingView.java –

関連する問題