/**
   * Creates the reflected images.
   *
   * @return true, if successful
   */
  private void createReflectedImages() {

    final int width = this.wrappedViewBitmap.getWidth();
    final int height = this.wrappedViewBitmap.getHeight();

    final Matrix matrix = new Matrix();
    matrix.postScale(1, -1);

    final int scaledDownHeight = (int) (height * originalScaledownFactor);
    final int invertedHeight = height - scaledDownHeight - reflectionGap;
    final int invertedBitmapSourceTop = scaledDownHeight - invertedHeight;
    final Bitmap invertedBitmap =
        Bitmap.createBitmap(
            this.wrappedViewBitmap,
            0,
            invertedBitmapSourceTop,
            width,
            invertedHeight,
            matrix,
            true);

    this.wrappedViewDrawingCanvas.drawBitmap(
        invertedBitmap, 0, scaledDownHeight + reflectionGap, null);

    final Paint paint = new Paint();
    final LinearGradient shader =
        new LinearGradient(
            0,
            height * imageReflectionRatio + reflectionGap,
            0,
            height,
            0x70ffffff,
            0x00ffffff,
            Shader.TileMode.CLAMP);
    paint.setShader(shader);
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
    this.wrappedViewDrawingCanvas.drawRect(
        0, height * (1 - imageReflectionRatio), width, height, paint);
  }
  @SuppressLint("DrawAllocation")
  @Override
  protected void onLayout(boolean changed, int l, int t, int r, int b) {
    if (changed) {
      int measuredWidth = this.getMeasuredWidth();
      int measuredHeight = this.getMeasuredHeight();

      if (this.wrappedViewBitmap == null
          || this.wrappedViewBitmap.getWidth() != measuredWidth
          || this.wrappedViewBitmap.getHeight() != measuredHeight) {
        this.wrappedViewBitmap =
            Bitmap.createBitmap(measuredWidth, measuredHeight, Bitmap.Config.ARGB_8888);
        this.wrappedViewDrawingCanvas = new Canvas(this.wrappedViewBitmap);
      }

      View child = getChildAt(0);
      int childWidth = child.getMeasuredWidth();
      int childHeight = child.getMeasuredHeight();
      int childLeft = (measuredWidth - childWidth) / 2;
      int childRight = measuredWidth - childLeft;
      child.layout(childLeft, 0, childRight, childHeight);
    }
  }