2012-11-08 44 views
1

我正在使用用戶可以使用手指繪製的新Canvas(位圖)函數創建的具有Canvas的Android應用程序。我遇到的問題是我無法找到一種方法來允許用戶使用手指擦除線條。我已經搜索谷歌和看樣品FingerPaint應用程序,但他們的方式使用擦除線:擦除位圖爲背景的畫布上的線

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

似乎只用純色的畫布工作。我已經編寫了執行撤銷/重做功能的代碼,但是能夠只擦除部分行而不是撤消所有更改,這將是非常好的。如果有人有任何想法,我可以嘗試我會很感激。

+0

不要把標籤放在主題 –

回答

1
public void resetBitmapCanvasAndPath() { 
    // TODO Auto-generated method stub 
    mDrawingUtilities.mBitmap = Bitmap.createBitmap(Constants.SCREEN_WIDTH,Constants.SCREEN_HEIGHT , 
      Bitmap.Config.ARGB_8888); 

     //Log.d("BITMAP","Restoring..."); 
     //mBitmap=BitmapFactory.decodeByteArray(bytes, 0, bytes.length); 

    mDrawingUtilities.mCanvas = new Canvas(mDrawingUtilities.mBitmap); 

    mDrawingUtilities.mPath = new Path(); 
} 

重置位圖。

0

這是棘手的,但一個解決方案:)。

在erease模式下,您的位圖填充顏色可能與背景顏色相同(例如白色)。 用戶可以使用背景顏色進行繪製,因此就像刪除一樣。 :)(DrawSomething就是這樣)。

+0

感謝您的意見。你有關於如何改變現有的位圖背景顏色的例子嗎?我做了一些搜索,但是我發現的所有東西聽起來像是會擦除或覆蓋位圖的圖像。 – Chris

+0

你的應用的背景顏色是什麼? –

+1

感謝您抽出時間發表評論。主LinearLayout顏色是白色的。畫布位於屏幕的中間位置,我創建的位圖是一個.png圖片文件,我將其轉換爲位圖。我很樂意嘗試你的想法。 – Chris

0

有時候,就像將受影響的像素的Alpha通道設置爲透明一樣簡單。我忘了它是0還是255,因爲它取決於平臺。

+0

我嘗試設置Color.Transparent的路徑,但沒有奏效。 – Chris

+0

啊。那是着色繪圖對象嗎?如果是這樣,就像你用隱形墨水畫 –

0

這是你如何把SetXfermode()使用方法:

 if (view.getId()== R.id.erase_btn){ erase_btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       onDraw.setErase(true); 
      } 
     } 


public void setErase(boolean isErase){ 
    erase=isErase; 
    if(erase) drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); 
    else drawPaint.setXfermode(null); 
} 

,這將幫助您刪除的內容您的畫布上的手指下面。