@Override
 protected void onDraw(Canvas canvas) {
   for (ShapeHolder ball : balls) {
     canvas.translate(ball.getX(), ball.getY());
     ball.getShape().draw(canvas);
     canvas.translate(-ball.getX(), -ball.getY());
   }
 }
 @Override
 protected void onDraw(Canvas canvas) {
   for (int i = 0; i < balls.size(); ++i) {
     ShapeHolder shapeHolder = balls.get(i);
     canvas.save();
     canvas.translate(shapeHolder.getX(), shapeHolder.getY());
     shapeHolder.getShape().draw(canvas);
     canvas.restore();
   }
 }
 private void addBall(float x, float y) {
   ShapeHolder shapeHolder = createBall(x, y);
   int red = (int) (100 + Math.random() * 155);
   int green = (int) (100 + Math.random() * 155);
   int blue = (int) (100 + Math.random() * 155);
   int color = 0xff000000 | red << 16 | green << 8 | blue;
   Paint paint = shapeHolder.getShape().getPaint();
   int darkColor = 0xff000000 | red / 4 << 16 | green / 4 << 8 | blue / 4;
   RadialGradient gradient =
       new RadialGradient(37.5f, 12.5f, 50f, color, darkColor, Shader.TileMode.CLAMP);
   paint.setShader(gradient);
   balls.add(shapeHolder);
 }