2013-03-21 108 views
2

我想爲我的繪畫應用實現橡皮擦。我可以用下面的代碼Android Paint PorterDuff.Mode.CLEAR在我的視圖上繪製黑色

paint.setColor(0x00000000); 
paint.setAlpha(0x00); 

抹去但是當你開始繪製擦除後再次不正確繪製,所以任何想法抹去油漆請建議。

+0

顯示您的代碼...並且您是否在API演示中看到過FingerPaing示例..? – Developer 2013-03-21 11:32:56

回答

3

嘗試下面的代碼。

 paint.setAlpha(0xFF);//transperent color 
     paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));//clear the draw 

另請參見示例文件夾圖形下的api演示中的示例FingerPaint.java。

setAlpha(int a) 

Helper to setColor(),只分配顏色的alpha值,保持其r,g,b值不變。

http://developer.android.com/reference/android/graphics/Paint.html。看看 文檔。

編輯:

還要檢查這個

https://code.google.com/p/android/issues/detail?id=54105#c1

+0

@Dnyaneshwar Wadghane嘗試以上。 – Raghunandan 2013-03-21 11:47:54

+0

不幸的是,這繪製了黑色 – Robert 2013-11-13 19:17:43

+1

好吧,我找到了答案!要實現不黑但透明的結果,您應該首先繪製另一個位圖。請在這裏閱讀評論:https://code.google.com/p/android/issues/detail?id = 54105#c1 – Robert 2013-11-13 19:59:49

-1

這是應該解決這個問題

private void touch_move(float x, float y){ 
    float dx = Math.abs(x - mX); 
    float dy = Math.abs(y - mY); 
    if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) { 
     mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2); 

     mPath.lineTo(mX, mY); 
     mCanvas.drawPath(mPath, mPaint); 
     mPath.reset(); 
     mPath.moveTo(mX, mY); 

     mX = x; 
     mY = y; 
    } 
} 

在touch_up()將其更改爲:

private void touch_up() { 

    mPath.reset(); 
} 
+0

我在API演示中的fingerpaint.java中試過這段代碼,指針的平滑度不是很好,可能是因爲我們在移動手指的同時繪製整個表面,然後重置路徑。 – 2013-09-18 10:09:12

+0

它在許多設備上工作正常,只是嘗試在其他設備(傳送操作系統和硬件),也在你的touch_start()只把這個代碼:mPath.reset(); \t \t mPath.moveTo(x,y); \t \t mX = x; \t \t mY = y; – user2167877 2013-09-25 17:31:02

0

我有同樣的問題。

需要設置視圖的setLayerType

yourView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

您可以在構造函數或視圖的對象中設置它。

它完成了。