2012-06-17 32 views
2

我一直在開發應用程序繪製,並有代碼:如何模擬視圖上的橡皮擦?

public class PainterView extends View implements DrawingListener { 

    private GestureDetector detector; 
    private Context context; 
    private Painter painter; 
    private Bitmap background; 
    private Bitmap bitmap; 
    private Paint bitmapPaint; 
    private Path path; 
    private Paint paint; 

    private float x; 
    private float y; 

    public PainterView(Context context, Painter painter) { 

     super(context); 
     this.context = context; 
     this.painter = painter; 
     detector = new GestureDetector(context, new GestureListener()); 

    } 

    @Override 
    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     super.onSizeChanged(w, h, oldw, oldh); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     if (bitmap != null) { 
      canvas.drawBitmap(background, 0, 0, bitmapPaint); 
      canvas.drawBitmap(bitmap, 0, 0, bitmapPaint); 
      canvas.drawPath(path, paint); 
     } 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     detector.onTouchEvent(event); 
     x = event.getX(); 
     y = event.getY(); 
     switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      painter.touchStart(x, y); 
      break; 
     case MotionEvent.ACTION_MOVE: 
      painter.touchMove(x, y); 
      break; 
     case MotionEvent.ACTION_UP: 
      painter.touchUp(); 
      break; 
     } 
     return true; 
    } 

    @Override 
    public void onPictureUpdate(Bitmap background, Bitmap bitmap, Paint bitmapPaint, Path path, 
      Paint paint) { 
     this.background=background; 
     this.bitmap = bitmap; 
     this.bitmapPaint = bitmapPaint; 
     this.path = path; 
     this.paint = paint; 
     invalidate(); 
    } 

    public void setPainter(Painter painter) { 
     this.painter = painter; 
    } 

所以,背景位圖圖像(格的紙),我需要知道我怎麼可以模擬橡皮擦以允許用戶擦除他的筆記?

回答

0

你可以做這樣的事情:

public class Eraser 
{ 
    public void erase(int locX, int locY, int brushsize) 
    { 
     for(int x = locX - brushsize;x < locX + brushsize;x++) 
     { 
      for(int y = locY - brushsize;y < locY + brushsize;y++) 
      { 
       map.setPixle(x,y,Color.white); 
      } 
     } 
    } 

    private Bitmap map; 
} 

這是一個方形的橡皮擦,我相信你能想出一個辦法,使之成爲圈,如果你真的想。我希望他幫助!

+1

我剛剛找到mPaint.setXfermode(新的PorterDuffXfermode( PorterDuff.Mode.CLEAR)),但它允許我使用黑色擦除,但我需要透明。你知道這件事嗎? – user1445877

+0

@ user1445877我從來沒有聽說過,但如果它完成了工作,那麼恭喜! – John