Program: 160214
Project: 160214
Buggy source:
@Override protected boolean getChildStaticTransformation(View child,Transformation t){
  FancyCoverFlowItemWrapper item=(FancyCoverFlowItemWrapper)child;
  if (android.os.Build.VERSION.SDK_INT >= 16) {
    item.invalidate();
  }
  final int coverFlowWidth=this.getWidth();
  final int coverFlowCenter=coverFlowWidth / 2;
  final int childWidth=item.getWidth();
  final int childHeight=item.getHeight();
  final int childCenter=item.getLeft() + childWidth / 2;
  final int actionDistance=(this.actionDistance == ACTION_DISTANCE_AUTO) ? (int)((coverFlowWidth) / 2.0f) : this.actionDistance;
  final float effectsAmount=Math.min(1.0f,Math.max(-1.0f,(1.0f / actionDistance) * (childCenter - coverFlowCenter)));
  final int rotationAngle=(int)(-effectsAmount * this.maxRotation);
  final float zoomAmount=1 - this.unselectedScale * Math.abs(effectsAmount);
  final float alphaAmount=(this.unselectedAlpha - 1) * Math.abs(effectsAmount) + 1;
  final float saturationAmount=(this.unselectedSaturation - 1) * Math.abs(effectsAmount) + 1;
  t.clear();
  t.setTransformationType(Transformation.TYPE_BOTH);
  t.setAlpha(alphaAmount);
  item.setSaturation(saturationAmount);
  final Matrix imageMatrix=t.getMatrix();
  this.transformationCamera.save();
  this.transformationCamera.rotateY(rotationAngle);
  this.transformationCamera.getMatrix(imageMatrix);
  this.transformationCamera.restore();
  final float translateX=childWidth / 2.0f;
  float translateY=0;
switch (this.scaleDownGravity) {
case Top:
    translateY=0;
  break;
case Center:
translateY=childHeight / 2.0f;
break;
case Bottom:
translateY=childHeight;
break;
}
imageMatrix.preTranslate(-translateX,-translateY);
imageMatrix.postScale(zoomAmount,zoomAmount);
imageMatrix.postTranslate(translateX,translateY);
return true;
}

Fixed version (ground truth):
@Override protected boolean getChildStaticTransformation(View child,Transformation t){
  FancyCoverFlowItemWrapper item=(FancyCoverFlowItemWrapper)child;
  if (android.os.Build.VERSION.SDK_INT >= 16) {
    item.invalidate();
  }
  final int coverFlowWidth=this.getWidth();
  final int coverFlowCenter=coverFlowWidth / 2;
  final int childWidth=item.getWidth();
  final int childHeight=item.getHeight();
  final int childCenter=item.getLeft() + childWidth / 2;
  final int actionDistance=(this.actionDistance == ACTION_DISTANCE_AUTO) ? (int)((coverFlowWidth) / 2.0f) : this.actionDistance;
  final float effectsAmount=Math.min(1.0f,Math.max(-1.0f,(1.0f / actionDistance) * (childCenter - coverFlowCenter)));
  final int rotationAngle=(int)(-effectsAmount * this.maxRotation);
  final float zoomAmount=(this.unselectedScale - 1) * Math.abs(effectsAmount) + 1;
  final float alphaAmount=(this.unselectedAlpha - 1) * Math.abs(effectsAmount) + 1;
  final float saturationAmount=(this.unselectedSaturation - 1) * Math.abs(effectsAmount) + 1;
  t.clear();
  t.setTransformationType(Transformation.TYPE_BOTH);
  t.setAlpha(alphaAmount);
  item.setSaturation(saturationAmount);
  final Matrix imageMatrix=t.getMatrix();
  this.transformationCamera.save();
  this.transformationCamera.rotateY(rotationAngle);
  this.transformationCamera.getMatrix(imageMatrix);
  this.transformationCamera.restore();
  final float translateX=childWidth / 2.0f;
  float translateY=0;
switch (this.scaleDownGravity) {
case Top:
    translateY=0;
  break;
case Center:
translateY=childHeight / 2.0f;
break;
case Bottom:
translateY=childHeight;
break;
}
imageMatrix.preTranslate(-translateX,-translateY);
imageMatrix.postScale(zoomAmount,zoomAmount);
imageMatrix.postTranslate(translateX,translateY);
return true;
}