2013-02-04 3 views
2

FingerPaint API 데모 예제를 기반으로 화면에 그리기위한 간단한 안드로이드 응용 프로그램을 작성하고 있습니다. 데모에서는 손가락이 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

예, 가능합니다. 원의 많은 경로를 추가하는 경우 그리는 동안 그냥 작은 원이 좋아 보이는 추가이

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

그게 사실은 점이 아니라 매우 짧은 줄입니다. –

+0

그것은 경로에서 점을 그릴 수있는 가장 쉬운 방법입니다 (제 생각 엔). 원을 그리기를 원하지 않는다면 – NaviRamyle

1

마찬가지로 X 또는 y로1을 추가 할 수 있지만 그것은 시간이 더 걸립니다 :

path.addRect(x - 0.5f, y - 0.5f, x + 0.5f, y + 0.5f, Path.Direction.CCW); 
:
path.addCircle(x, y, 1, Path.Direction.CCW); 

그래서 점을 중심으로 작은 사각형을 추가하면 트릭을 할 것입니다

관련 문제