Try to change the orden in which you do the update:
1.) Calculate the new positions of the ball
2.) Check against a collision
3.) Draw the ball.
This is also not correct by 100%, because for a defenitely correct collision you have to calculate the correct position of the collision - because if you recognice a collision at point 2 - you can not assume that the collsion happened at the balls new position, it is more likely that it happened somwhere between the two points, debending on speed and size of your objects
1.) Calculate the new positions of the ball
2.) Check against a collision
3.) Draw the ball.
This is also not correct by 100%, because for a defenitely correct collision you have to calculate the correct position of the collision - because if you recognice a collision at point 2 - you can not assume that the collsion happened at the balls new position, it is more likely that it happened somwhere between the two points, debending on speed and size of your objects