Android關於建立塗鴉板過程中出現的小問題

來源:互聯網
上載者:User

標籤:

      我前一段時間在製作塗鴉板的過程中在處理橡皮擦功能上碰上了一些小問題,網上部分資源提到的實現方法和我下面說到的橡皮擦基本方法實現思路大仿類似,以下是基本思路:

     橡皮擦就是用和畫布顏色一致顏色的畫筆在螢幕觸摸,實現橡皮擦的功能。

         1)初始化畫筆,並且設定畫筆的顏色為白色(這裡其實要設定為畫布的顏色)。

         2)設定畫筆的大小為合適的大小。

         3)用一個變數記住橡皮擦的顏色,用於在其他動作後重新使用橡皮擦。


以上為簡易的橡皮擦主要是使用和畫布相同的的顏色來覆蓋,但當背景圖為一張照片(背景圖)時是不可行的,因為顏色會很明顯的展示在背景圖上,而且需要注意的是:即使是將畫筆顏色變為透明色也是不可行的,綜上我們選擇用渲染模式來處理橡皮擦

這裡選擇渲染模式Xfermode的DIS_IN,這樣我們處理後會發現出現黑色陰影邊框,效果實現了,但是bug非常明顯

之後選擇渲染模式的CLEAR這個模式會擦除所有像素點,但是發現是以黑色線條的形式去擦除的

通過STACK OVER FLOW網站超找到兩者解決辦法:

       1.改變touch_move方法的path畫圖的相關方法,效果實現了但是對撤銷和重做造成了一定影響(並且所畫線不再圓滑),最終沒有選用

privatevoid touch_move(float x,float y){ float dx =Math.abs(x- mX); float dy =Math.abs(mY- y); if(dx>= TOUCH_TOLERANCE|| dy>= TOUCH_TOLERANCE){ // 從x1,y1到x2,y2畫一條貝茲路徑,更平滑(直接用mPath.lineTo也可以) // mPath.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2);   mPath.lineTo(mX, mY); mCanvas.drawPath(mPath, mPaint);   //將一條完整的路徑儲存下來(相當於入棧操作) savePath.add(dp); mPath.reset();   mPath.moveTo(mX, mY);     mX= x; mY= y; } }   privatevoid touch_up(){   mPath=null;// 重新置空 //mPath.reset(); } 2.最終發現只需要設定預設type就能解決該問題
 setLayerType(LAYER_TYPE_SOFTWARE,null);//設定預設樣式,去除dis-in的黑色方框以及clear模式的黑線效果
橡皮擦相關代碼
 if (currentStyle == 1) {//正常畫筆            mPaint.setStrokeWidth(currentSize);            mPaint.setColor(currentColor);        } else {//橡皮擦            mPaint.setAlpha(0);            mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));            mPaint.setColor(Color.TRANSPARENT);            mPaint.setStrokeWidth(50);        }


Android關於建立塗鴉板過程中出現的小問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.