2013-03-16 64 views
0

我需要在屏幕上繪圖,並將其捕獲並顯示在另一個活動中,但我不需要顯示繪圖的顏色,即只顯示手指會移動,沒有人能夠看到它的繪製。在屏幕上繪製而不顯示顏色,並保存圖像

不知道如何在這種情況下取​​得進展。 我做得出這樣的,但這是正常的,你所看到的一些一個是借鑑:

class SignatureView extends View { 

     private static final float STROKE_WIDTH = 5f; 

     private static final float HALF_STROKE_WIDTH = STROKE_WIDTH/2; 

     private Paint paint = new Paint(); 
     private Path path = new Path(); 

     private float lastTouchX; 
     private float lastTouchY; 
     private final RectF dirtyRect = new RectF(); 

     public SignatureView(Context context) { 
     super(context); 

     paint.setAntiAlias(true); 
     paint.setColor(Color.WHITE); 
     paint.setStyle(Paint.Style.STROKE); 
     paint.setStrokeJoin(Paint.Join.ROUND); 
     paint.setStrokeWidth(STROKE_WIDTH); 
     } 

     public void clear() { 


     path.reset(); 
     AddView(); 

     invalidate(); 
     } 

     @Override 
     protected void onDraw(Canvas canvas) { 
     canvas.drawPath(path, paint); 
     } 

     @Override 
     public boolean onTouchEvent(MotionEvent event) { 
     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); 
       expandDirtyRect(historicalX, historicalY); 
       path.lineTo(historicalX, historicalY); 
      } 

      path.lineTo(eventX, eventY); 
      break; 

      default: 
      debug("Ignored touch event: " + event.toString()); 
      return false; 
     } 

     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 expandDirtyRect(float historicalX, float historicalY) { 
     if (historicalX < dirtyRect.left) { 
      dirtyRect.left = historicalX; 
     } else if (historicalX > dirtyRect.right) { 
      dirtyRect.right = historicalX; 
     } 
     if (historicalY < dirtyRect.top) { 
      dirtyRect.top = historicalY; 
     } else if (historicalY > dirtyRect.bottom) { 
      dirtyRect.bottom = historicalY; 
     } 
     } 


     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,但沒有用它設置透明圖像。

回答

0

請嘗試以下變化

paint.setColor(Color.TRANSPARENT);