2013-02-28 68 views
3

我正在使用下面的代碼捕獲繪圖。爲了改變描邊顏色或寬度,我打電話給setPaintAttribute()方法。但是,當我改變顏色時,整個繪圖會發生變化,包括我之前繪製的線條。我怎樣才能改變油漆的顏色,並保持前面的圖紙不變?我試圖創建一個新的路徑,但之前的繪圖消失。更改繪畫顏色時,現有筆畫也會更改

public void setPaintAttributes(float STROKE_WIDTH, int color) 
    { 
     paint=new Paint(); 
     paint.setAntiAlias(true); 
     paint.setColor(color); 
     paint.setStyle(Paint.Style.STROKE); 
     paint.setStrokeJoin(Paint.Join.ROUND); 
     paint.setStrokeWidth(STROKE_WIDTH); 
    } 
public boolean onTouchEvent(MotionEvent event) { 
     scrollView.requestDisallowInterceptTouchEvent(true); 
     btnSaveSignature.setEnabled(true); 
     btnSaveSignature.setBackgroundResource(R.drawable.save); 
     float eventX = event.getX(); 
     float eventY = event.getY();   

     switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      path.moveTo(eventX, eventY); 
      lastTouchX = eventX; 
      lastTouchY = eventY; 
      return true; 

     case MotionEvent.ACTION_MOVE: 

     case MotionEvent.ACTION_UP: 

      resetDirtyRect(eventX, eventY); 
      int historySize = event.getHistorySize(); 
      for (int i = 0; i < historySize; i++) { 
       float historicalX = event.getHistoricalX(i); 
       float historicalY = event.getHistoricalY(i); 
       path.lineTo(historicalX, historicalY); 
      } 
      path.lineTo(eventX, eventY); 
      break; 
     } 

     invalidate((int) (dirtyRect.left - HALF_STROKE_WIDTH), 
       (int) (dirtyRect.top - HALF_STROKE_WIDTH), 
       (int) (dirtyRect.right + HALF_STROKE_WIDTH), 
       (int) (dirtyRect.bottom + HALF_STROKE_WIDTH)); 

     lastTouchX = eventX; 
     lastTouchY = eventY; 

     return true; 
    } 

    private void resetDirtyRect(float eventX, float eventY) { 
     dirtyRect.left = Math.min(lastTouchX, eventX); 
     dirtyRect.right = Math.max(lastTouchX, eventX); 
     dirtyRect.top = Math.min(lastTouchY, eventY); 
     dirtyRect.bottom = Math.max(lastTouchY, eventY); 
    } 
+0

喜,任何人都有解決辦法。?我正在努力解決這個問題。請幫幫我。 – Karthick 2013-03-03 08:40:19

+0

此更新?..? – Karthick 2013-03-04 05:32:56

+0

觸摸屏幕時,僅觸摸識別,沒有繪製點。這是Android簽名捕獲的問題嗎? – Karthick 2013-03-05 05:35:09

回答

1

創建一個包含對路徑和油漆的ArrayList,然後添加到ArrayList中的每個路徑,它爲我工作,如下

ArrayList<Pair<Path, Paint>> paths = new ArrayList<Pair<Path, Paint>>(); 

用途:

mCanvas = new Canvas(); 
    mPath = new Path(); 
    Paint newPaint = new Paint(mPaint); 
    paths.add(new Pair<Path, Paint>(mPath, newPaint));