2012-03-30 35 views
6

Tôi tạo một Ứng dụng mà tôi muốn xóa các đường vẽ có sự kiện. Đối với điều này, tôi đã sử dụngLàm cách nào để thay đổi màu xóa mặc định trong ứng dụng vẽ trong Android?

mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); 

nhưng tại thời điểm xóa đường, dòng đó trở thành màu đen đầu tiên sau đó bị xóa. Tôi muốn một màu trong suốt để xóa một bản vẽ một con đường.

+1

Tôi cũng lấy ra vấn đề mà ....... Can bất kỳ sự giúp đỡ cơ thể ...? – Kalpesh

+0

@ user1287756 có u có giải pháp cho vấn đề đó. – AndroidDev

+0

Tôi có cùng một vấn đề. Có giải pháp nào không? –

Trả lời

1

Tôi đã trải qua FingerPaint.java từ APIDemos tức android-sdk\samples\android-17\ApiDemos

và sửa đổi

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.drawColor(0xFFAAAAAA); 

    canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 

    canvas.drawPath(mPath, mPaint); 
} 

để

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.drawColor(0xFFAAAAAA); 

    canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 

    mCanvas.drawPath(mPath, mPaint); // this line changed 
            // mCanvas is Canvas variable which is 
            // initialized in onSizeChanged() 
} 

Bây giờ nó không được vẽ một màu đen khi tẩy xoá, mọi thứ đều hoạt động tốt. Không chắc chắn nó là 100% câu trả lời đúng nhưng nó làm việc cho tôi.

+0

Nó chắc chắn là sai vì bạn đang vẽ đường dẫn đến một trường hợp Canvas khác nhau – EyalBellisha

+1

omg bạn đã thực hiện công việc của tôi. Rất nhiều người đàn ông :) –

+0

@EyalBellisha thực sự nó làm việc cho tôi quá, bởi vì bạn đang vẽ đối tượng mCanvas vĩnh viễn và chỉ tạm thời đối với đối tượng canvas onDraw, công cụ xóa hoạt động ngay trên đối tượng mCanvas. Nếu tôi cố vẽ đường tẩy trên đối tượng canvas onDraw thì nó chỉ được áp dụng sau khi tôi nhấc ngón tay lên. – kabuto178

0

Hey Tôi đã sử dụng một loại lừa để loại bỏ các màu đen line.In nút xóa của tôi, tôi đã thiết lập các màu sang màu trắng, thay vì sử dụng XferMode ..

if(erase){ 
paintColor = Color.parseColor(newColor); 
drawPaint.setColor(paintColor); 
} 
0

dưới đây làm việc cho xóa trên nền trong suốt ...

Gọi SetErase (true) để bắt đầu xóa.

Phương pháp OnDraw sau đó sẽ vẽ một đường màu trắng (thay vì màu đen), sau đó sẽ được xóa thành màu trong suốt và bạn giữ tất cả thông tin hoàn tác của đường dẫn.

Gọi SetErase() để chuyển đổi xóa on/off

public void SetErase(bool On) 
    { 
     if (On) 
     { 
      if (!_erasing) 
      { 
       _delpaint = new Paint(_paint); 
       _delpaint.Color = Color.White; 
       _paint.SetXfermode(new PorterDuffXfermode(PorterDuff.Mode.Clear)); 
       _erasing = true; 
      } 
     } 
     else if (_erasing) 
     { 
      _erasing = false; 
      _paint.SetXfermode(null); 
     } 
    } 

    protected override void OnDraw(Canvas canvas) 
    { 
     canvas.DrawColor(BackgroundColor); 
     canvas.DrawBitmap(CanvasBitmap, 0, 0, _bitmapPaint); 
     if (_erasing) 
     { 
      canvas.DrawPath(_path, _delpaint); // draw white path 
     } 
     else 
     { 
      canvas.DrawPath(_path, _paint); 
     } 
    }