Пульсирующая кнопка анимация андроида

Прямо сейчас я работаю с приложением для распознавания голоса, и я хочу сделать свою кнопку воспроизведения / остановки «пульсом», когда она записывается. Что-то вроде этого: Введите описание изображения здесь

Я попытался сделать ScaleAnimation, делая кнопку расти, но, конечно, она заставляет расти все кнопки.

public static ObjectAnimator pulseAnimation(ImageView target){ ObjectAnimator scaleDown = ObjectAnimator.ofPropertyValuesHolder(target, PropertyValuesHolder.ofFloat("scaleX", 1.1f), PropertyValuesHolder.ofFloat("scaleY", 1.1f)); scaleDown.setDuration(310); scaleDown.setRepeatCount(ObjectAnimator.INFINITE); scaleDown.setRepeatMode(ObjectAnimator.REVERSE); return scaleDown; } 

Таким образом, идея достигает чего-то подобного, но только с альфой за фактической кнопкой. Я хочу знать, возможно ли это сделать с альфа-анимацией или чем-то, прежде чем добавить вторую «Альфа-кнопку» за моей кнопкой, чтобы она стала расти и добиться этого эффекта.

Огромное спасибо заранее!

    Наконец я нашел решение! Я переопределил метод onDraw и нарисовал первый круг для моей кнопки, и когда мое логическое значение истинно. Я рисую второй круг с альфой в качестве фона. Создание пульсирующего эффекта:

      @Override protected void onDraw(Canvas canvas) { int w = getMeasuredWidth(); int h = getMeasuredHeight(); mCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG); mCirclePaint.setColor(mColor); mBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mBackgroundPaint.setColor(Util.adjustAlpha(mColor, 0.4f)); //Draw circle canvas.drawCircle(w/2, h/2, MIN_RADIUS_VALUE , mCirclePaint); if (mAnimationOn) { if (mRadius >= MAX_RADIUS_VALUE) mPaintGoBack = true; else if(mRadius <= MIN_RADIUS_VALUE) mPaintGoBack = false; //Draw pulsating shadow canvas.drawCircle(w / 2, h / 2, mRadius, mBackgroundPaint); mRadius = mPaintGoBack ? (mRadius - 0.5f) : (mRadius + 0.5f); invalidate(); } super.onDraw(canvas); } public void animateButton(boolean animate){ if (!animate) mRadius = MIN_RADIUS_VALUE; mAnimationOn = animate; invalidate(); }