Program: 92725
Project: 92725
Buggy source:
private void init(final Context context,final AttributeSet attrs){
  if (isInEditMode())   return;
  if (null == attrs) {
    throw new IllegalArgumentException("String_Node_Str");
  }
  final TypedArray typedArray=context.obtainStyledAttributes(attrs,R.styleable.RippleBackground);
  rippleColor=typedArray.getColor(R.styleable.RippleBackground_rb_color,getResources().getColor(R.color.rippelColor));
  rippleStrokeWidth=typedArray.getDimension(R.styleable.RippleBackground_rb_strokeWidth,getResources().getDimension(R.dimen.rippleStrokeWidth));
  rippleRadius=typedArray.getDimension(R.styleable.RippleBackground_rb_radius,getResources().getDimension(R.dimen.rippleRadius));
  rippleDurationTime=typedArray.getInt(R.styleable.RippleBackground_rb_duration,DEFAULT_DURATION_TIME);
  rippleAmount=typedArray.getInt(R.styleable.RippleBackground_rb_rippleAmount,DEFAULT_RIPPLE_COUNT);
  rippleScale=typedArray.getFloat(R.styleable.RippleBackground_rb_scale,DEFAULT_SCALE);
  rippleType=typedArray.getInt(R.styleable.RippleBackground_rb_type,DEFAULT_FILL_TYPE);
  typedArray.recycle();
  rippleDelay=rippleDurationTime / rippleAmount;
  paint=new Paint();
  paint.setAntiAlias(true);
  if (rippleType == DEFAULT_FILL_TYPE) {
    rippleStrokeWidth=0;
    paint.setStyle(Paint.Style.FILL);
  }
 else   paint.setStyle(Paint.Style.STROKE);
  paint.setColor(rippleColor);
  rippleParams=new LayoutParams((int)(2 * (rippleRadius + rippleStrokeWidth)),(int)(2 * (rippleRadius + rippleStrokeWidth)));
  rippleParams.addRule(CENTER_IN_PARENT,TRUE);
  animatorSet=new AnimatorSet();
  animatorSet.setDuration(rippleDurationTime);
  animatorSet.setInterpolator(new AccelerateDecelerateInterpolator());
  animatorList=new ArrayList<Animator>();
  for (int i=0; i < rippleAmount; i++) {
    RippleView rippleView=new RippleView(getContext());
    addView(rippleView,rippleParams);
    rippleViewList.add(rippleView);
    final ObjectAnimator scaleXAnimator=ObjectAnimator.ofFloat(rippleView,"String_Node_Str",1.0f,rippleScale);
    scaleXAnimator.setRepeatCount(ObjectAnimator.INFINITE);
    scaleXAnimator.setRepeatMode(ObjectAnimator.RESTART);
    scaleXAnimator.setStartDelay(i * rippleDelay);
    animatorList.add(scaleXAnimator);
    final ObjectAnimator scaleYAnimator=ObjectAnimator.ofFloat(rippleView,"String_Node_Str",1.0f,rippleScale);
    scaleYAnimator.setRepeatCount(ObjectAnimator.INFINITE);
    scaleYAnimator.setRepeatMode(ObjectAnimator.RESTART);
    scaleYAnimator.setStartDelay(i * rippleDelay);
    animatorList.add(scaleYAnimator);
    final ObjectAnimator alphaAnimator=ObjectAnimator.ofFloat(rippleView,"String_Node_Str",1.0f,0f);
    alphaAnimator.setRepeatCount(ObjectAnimator.INFINITE);
    alphaAnimator.setRepeatMode(ObjectAnimator.RESTART);
    alphaAnimator.setStartDelay(i * rippleDelay);
    animatorList.add(alphaAnimator);
  }
  animatorSet.playTogether(animatorList);
}

Fixed version (ground truth):
private void init(final Context context,final AttributeSet attrs){
  if (isInEditMode())   return;
  if (null == attrs) {
    throw new IllegalArgumentException("String_Node_Str");
  }
  final TypedArray typedArray=context.obtainStyledAttributes(attrs,R.styleable.RippleBackground);
  rippleColor=typedArray.getColor(R.styleable.RippleBackground_rb_color,getResources().getColor(R.color.rippelColor));
  rippleStrokeWidth=typedArray.getDimension(R.styleable.RippleBackground_rb_strokeWidth,getResources().getDimension(R.dimen.rippleStrokeWidth));
  rippleRadius=typedArray.getDimension(R.styleable.RippleBackground_rb_radius,getResources().getDimension(R.dimen.rippleRadius));
  rippleDurationTime=typedArray.getInt(R.styleable.RippleBackground_rb_duration,DEFAULT_DURATION_TIME);
  rippleAmount=typedArray.getInt(R.styleable.RippleBackground_rb_rippleAmount,DEFAULT_RIPPLE_COUNT);
  rippleScale=typedArray.getFloat(R.styleable.RippleBackground_rb_scale,DEFAULT_SCALE);
  rippleType=typedArray.getInt(R.styleable.RippleBackground_rb_type,DEFAULT_FILL_TYPE);
  typedArray.recycle();
  rippleDelay=rippleDurationTime / rippleAmount;
  paint=new Paint();
  paint.setAntiAlias(true);
  if (rippleType == DEFAULT_FILL_TYPE) {
    rippleStrokeWidth=0;
    paint.setStyle(Paint.Style.FILL);
  }
 else   paint.setStyle(Paint.Style.STROKE);
  paint.setColor(rippleColor);
  rippleParams=new LayoutParams((int)(2 * (rippleRadius + rippleStrokeWidth)),(int)(2 * (rippleRadius + rippleStrokeWidth)));
  rippleParams.addRule(CENTER_IN_PARENT,TRUE);
  animatorSet=new AnimatorSet();
  animatorSet.setInterpolator(new AccelerateDecelerateInterpolator());
  animatorList=new ArrayList<Animator>();
  for (int i=0; i < rippleAmount; i++) {
    RippleView rippleView=new RippleView(getContext());
    addView(rippleView,rippleParams);
    rippleViewList.add(rippleView);
    final ObjectAnimator scaleXAnimator=ObjectAnimator.ofFloat(rippleView,"String_Node_Str",1.0f,rippleScale);
    scaleXAnimator.setRepeatCount(ObjectAnimator.INFINITE);
    scaleXAnimator.setRepeatMode(ObjectAnimator.RESTART);
    scaleXAnimator.setStartDelay(i * rippleDelay);
    scaleXAnimator.setDuration(rippleDurationTime);
    animatorList.add(scaleXAnimator);
    final ObjectAnimator scaleYAnimator=ObjectAnimator.ofFloat(rippleView,"String_Node_Str",1.0f,rippleScale);
    scaleYAnimator.setRepeatCount(ObjectAnimator.INFINITE);
    scaleYAnimator.setRepeatMode(ObjectAnimator.RESTART);
    scaleYAnimator.setStartDelay(i * rippleDelay);
    scaleYAnimator.setDuration(rippleDurationTime);
    animatorList.add(scaleYAnimator);
    final ObjectAnimator alphaAnimator=ObjectAnimator.ofFloat(rippleView,"String_Node_Str",1.0f,0f);
    alphaAnimator.setRepeatCount(ObjectAnimator.INFINITE);
    alphaAnimator.setRepeatMode(ObjectAnimator.RESTART);
    alphaAnimator.setStartDelay(i * rippleDelay);
    alphaAnimator.setDuration(rippleDurationTime);
    animatorList.add(alphaAnimator);
  }
  animatorSet.playTogether(animatorList);
}