Как переместить два круга на холсте Android? - PullRequest
0 голосов
/ 20 июня 2020

Я могу перемещать круг только в методе onTouchEvent

Еще одна проблема, которую я заметил, заключается в том, что когда вы касаетесь любого места на холсте, положение Circle One изменяется

Это должно происходить ТОЛЬКО при касании / перетаскивании Круга

Похоже, Canvas распознает только прикосновение

Как я могу решить эту проблему?

public class Example extends View {    
    private Paint circleOne, circleTwo;

    float xCircleOne, yCircleOne, xCircleTwo, yCircleTwo;

    int radiusCircleOne = 100;
    int radiusCircleTwo = 50;

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

        init();
    }

    private void init() {
        circleOne = new Paint();
        circleTwo = new Paint();

        ...
    }

    @SuppressLint("ClickableViewAccessibility")
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_MOVE:
                xCircleOne = event.getX();
                yCircleOne = event.getY();

                invalidate();
                break;
        }

        return true;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        // Circles
        canvas.drawCircle(xCircleOne, yCircleOne, radiusCircleOne, circleOne);
        canvas.drawCircle(xCircleTwo, yCircleTwo, radiusCircleTwo, circleTwo);
    }
}

1 Ответ

1 голос
/ 20 июня 2020
int xonTouch,yonTouch,xonMotion,yonMotion;
boolean trackStatus;
int xdistance=xCircleTwo-xCircleOne;
int ydistance=yCircleTwo-YCircleOne;

@SuppressLint("ClickableViewAccessibility")
   @Override
   public boolean onTouchEvent(MotionEvent event) {

      switch (event.getAction()) {
           case MotionEvent.ACTION_DOWN://getInitialCoordinates when when you Touch;
            xonTouch=event.getX();
            yonTouch=event.geyY();
//TO move only when touching and dragging
//check if these xonTouch and yonTouch are inside the circle by comparing the coordinates of circle if these lie inside cirlce return true to track motion else return false so the ACTION_MOVE is not triggered
i.e          if(condition)//condition=xonTouch and yonTouch lie inside circle.
            trackStatus=true;
else trackStatus=false;



            break;
           case MotionEvent.ACTION_MOVE:
//to move circle two use following 
               xCircleOne = event.getX();
               yCircleOne = event.getY();
                xCircleTwo= xCircleOne+xdistance;
               yCircleTwo = yCircleOne+ydistance;
trackStatus=true;



               invalidate();
               break;
       }
case MotionEvent.ACTION_UP:
trackStatus=false;
break;}

       return trackStatus;
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...