2017-02-15 37 views
0

我可以編寫一個應用程序來繪製的油漆,但我有一個問題開始從圓的Android

我要開始從圓拉絲, 我的出發點永遠是圓的,我怎麼能做到這一點?

現在我可以從任何一點借鑑,我試圖找到在屏幕的中間,但它沒有工作

enter image description here

public CanvasView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    this.context = context; 
    path = new Path(); 
    paint = new Paint(); 
    paint.setColor(Color.RED); 
    paint.setAntiAlias(true); 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setStrokeJoin(Paint.Join.ROUND); 
    paint.setStrokeWidth(20f); 
} 

@Override 
protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
    super.onSizeChanged(w, h, oldw, oldh); 
    mbitmap = Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888); 
    mcanvas = new Canvas(mbitmap); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics(); 
    int a = metrics.widthPixels; // to get width of the screen 
    int b = metrics.heightPixels; 

    canvas.drawCircle(a/2,((b/2)-160),50, paint); 
    if ((canDraw)) { 
     canvas.drawPath(path, paint); 
    } 
} 

private void startTouch (float x , float y){ 
    if ((canDraw)) { 
    path.moveTo(x,y); 
    mX = x; 
    mY = y ; 
}} 
public void moveTouche (float x,float y) { 
    if ((canDraw)) { 
    float dx = Math.abs(x - mX); 
    float dy = Math.abs(y - mY); 
    if(dx >= Tolerance || dy >= Tolerance){ 
     path.quadTo(mX,mY,(x+mX)/2,(y+mY)/2); 
     mX = x ; 
     mY = y; 

    }} 
} 
private void upTouch(){ 
    if ((canDraw)) { 
    path.lineTo(mX,mY); 
}} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    float x = event.getX(); 
    float y = event.getY(); 
    switch (event.getAction()){ 
     case MotionEvent.ACTION_DOWN: 
      startTouch(x,y); 
      invalidate(); 
      break ; 
     case MotionEvent.ACTION_UP: 
      upTouch(); 
      invalidate(); 
      break ; 
     case MotionEvent.ACTION_MOVE: 
      moveTouche(x,y); 
      invalidate(); 
      break; 
    } 
    return true ; 
} 
}  

回答

0
  • 發現,界定您的中心區域的座標從觸摸必須啓動,或創建一個標識它的元素
  • 裏面ouTouchEvent,這樣寫:

    case MotionEvent.ACTION_DOWN: 
        if (touchIsInsideCircle(x,y)) { 
         startTouch(x,y); 
         invalidate(); 
        } 
        break ; 
    
  • 限定,通過使用座標預先知道屏幕的中心的函數:

    boolean touchIsInsideCircle(float x, float y) { 
        return (x < maxX && x > minX && y < maxY && y > minY); 
    } 
    
+0

所以我嘗試與此 '私人布爾touchIsInsideCircle(浮動的x,浮子y)的{ int a = metrics.widthPixels; //獲取屏幕寬度 int b = metric.heightPixels; return(x < a/2 && x > a/2 && y <((b/2)-160)&& y>((b/2)-160))}' 這些是圓的座標,繪圖始終開始的問題與x == 0和y == 0,每次我觸摸屏幕點連接 – CamlX