2017-02-15 24 views
0

Я мог бы запрограммировать приложение, чтобы сделать, но у меня есть проблеманачать краску из круга андроида

Я хочу, чтобы начать рисовать из круга, моей точки всегда будет круг, как я мог это сделать?

Теперь я могу сделать из любой точки, я пытался найти середину экрана, но это не сработало

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
  • найти координаты, которые ограничивают вашу центральную область, с которой touch необходимо запустить или создать элемент, который идентифицирует его
  • внутри 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 (флоат х, поплавок у) { int a = metrics.widthPixels; // для получения ширины экрана int b = metrics.heightPixels; return (x < a/2 && x > a/2 && y <((b/2) -160) && y> ((b/2) -160))} ' Это координаты круга, проблема всегда начинается с рисунка с x == 0 и y == 0, и каждый раз, когда я касаюсь экрана, точки соединены – CamlX