2013-02-04 22 views
2

我正在編寫基於FingerPaint API演示示例的屏幕上繪製的簡單android應用程序。只有在手指在TOUCH_TOLERANCE定義的屏幕上行進了一定距離之後,演示圖纔開始。即使用戶不移動手指,我也想繪製點。可能嗎?是否可以使用android.graphics.Path來繪製點

@Override 
    protected void onDraw(Canvas canvas) { 
     canvas.drawColor(0xFFAAAAAA); 
     canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 
     canvas.drawPath(mPath, mPaint); 
    } 

    private float mX, mY; 
    private static final float TOUCH_TOLERANCE = 4; 

    private void touch_start(float x, float y) { 
     mPath.reset(); 
     mPath.moveTo(x, y); 
     //mPath.lineTo(x + 1, y + 1); //quick fix 
     mX = x; 
     mY = y; 
    } 
    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); 
      mX = x; 
      mY = y; 
     } 
    } 
    private void touch_up() { 
     mPath.lineTo(mX, mY); 
     // commit the path to our offscreen 
     mCanvas.drawPath(mPath, mPaint); 
     // kill this so we don't double draw 
     mPath.reset(); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     float x = event.getX(); 
     float y = event.getY(); 

     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       touch_start(x, y); 
       invalidate(); 
       break; 
      case MotionEvent.ACTION_MOVE: 
       touch_move(x, y); 
       invalidate(); 
       break; 
      case MotionEvent.ACTION_UP: 
       touch_up(); 
       invalidate(); 
       break; 
     } 
     return true; 
    } 
+0

您的問題已在這裏找到答案: http://stackoverflow.com/questions/17251416/android-fingerpaint-sample-does-not-draw-dot –

回答

2

是的,這是可能的。只需添加到Xÿ 喜歡這個

//Create a dot 
path.setLastPoint(x, y); 
x++; 
path.lineTo(x, y); 
+0

那不是一個真正的點,但在很短的線。 –

+0

這是在路徑中繪製點的最簡單方法(我認爲)。除非你想畫一個圓圈 – NaviRamyle

1

添加一個小圓圈看起來更好,但它需要更多的時間在繪製如果有很多圈被添加到路徑:

path.addCircle(x, y, 1, Path.Direction.CCW); 

所以,加入一個小矩形圍繞該點就可以了:

path.addRect(x - 0.5f, y - 0.5f, x + 0.5f, y + 0.5f, Path.Direction.CCW); 
相關問題