10496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague/* 20496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * Copyright (C) 2014 The Android Open Source Project 30496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * 40496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * Licensed under the Apache License, Version 2.0 (the "License"); 50496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * you may not use this file except in compliance with the License. 60496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * You may obtain a copy of the License at 70496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * 80496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * http://www.apache.org/licenses/LICENSE-2.0 90496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * 100496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * Unless required by applicable law or agreed to in writing, software 110496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * distributed under the License is distributed on an "AS IS" BASIS, 120496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * See the License for the specific language governing permissions and 140496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * limitations under the License. 150496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague */ 160496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 170496fcaa51f88f6c753975473b971941e4090cfaSpike Spraguepackage com.android.camera.ui; 180496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 190496fcaa51f88f6c753975473b971941e4090cfaSpike Spragueimport android.animation.Animator; 200496fcaa51f88f6c753975473b971941e4090cfaSpike Spragueimport android.animation.Animator.AnimatorListener; 210496fcaa51f88f6c753975473b971941e4090cfaSpike Spragueimport android.animation.ValueAnimator; 220496fcaa51f88f6c753975473b971941e4090cfaSpike Spragueimport android.content.res.Resources; 230496fcaa51f88f6c753975473b971941e4090cfaSpike Spragueimport android.graphics.Canvas; 240496fcaa51f88f6c753975473b971941e4090cfaSpike Spragueimport android.graphics.ColorFilter; 250496fcaa51f88f6c753975473b971941e4090cfaSpike Spragueimport android.graphics.Paint; 260496fcaa51f88f6c753975473b971941e4090cfaSpike Spragueimport android.graphics.PixelFormat; 270496fcaa51f88f6c753975473b971941e4090cfaSpike Spragueimport android.graphics.Point; 280496fcaa51f88f6c753975473b971941e4090cfaSpike Spragueimport android.graphics.drawable.Drawable; 290496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 300496fcaa51f88f6c753975473b971941e4090cfaSpike Spragueimport com.android.camera.util.Gusterpolator; 310496fcaa51f88f6c753975473b971941e4090cfaSpike Spragueimport com.android.camera2.R; 320496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 330496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague/** 340496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * This class implements a circular drawable that starts with a zero radius 350496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * and can be triggered to animate expand to a given radius. 360496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * <p> 37955ae1f8afc9c4fb0905e0baece959efac9326f6Spike Sprague * There are two colors associated with this drawable: 380496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * <p> 390496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * A background color, which is loaded from a resource 400496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * R.color.mode_icon_hover_highlight. 410496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * <p> 420496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * And, a main color, which is attached to the main circle that is expanded last 430496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * and is drawn on top of the other colors. 440496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * <p> 450496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * The driving purpose for this class is to implement a Material-like look and 460496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * feel for mode switcher touch events. 470496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague */ 480496fcaa51f88f6c753975473b971941e4090cfaSpike Spraguepublic class TouchCircleDrawable extends Drawable { 49955ae1f8afc9c4fb0905e0baece959efac9326f6Spike Sprague private static final int CIRCLE_ANIM_DURATION_MS = 250; 500496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 510496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague private Paint mColorPaint = new Paint(); 520496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague private Paint mBackgroundPaint = new Paint(); 530496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague private int mColor; 540496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague private int mColorAlpha = 0xff; 550496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague private int mColorRadius; 560496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague private int mBackgroundRadius; 570496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague private Drawable mIconDrawable; 580496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague private int mIconDrawableSize; 590496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague private boolean mDrawBackground; 600496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 610496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague private Animator.AnimatorListener mAnimatorListener; 620496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague private ValueAnimator.AnimatorUpdateListener mUpdateListener; 630496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 640496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague private static final int INVALID = -1; 650496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague private int mW = INVALID; 660496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague private int mH = INVALID; 670496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague private Point mCenter; 680496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 690496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague /** 700496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * Constructor 710496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * 720496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * @param resources Resources, needed to poke around for the background 730496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * color value. 740496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * @param color The main this circle drawable expands to. 750496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * @param baseColor The color of the initial expanded circle 760496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * (draws behind the main color). 770496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague */ 780496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague public TouchCircleDrawable(Resources resources, int color, int baseColor) { 790496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague super(); 800496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 810496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mColorPaint.setAntiAlias(true); 820496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mBackgroundPaint.setAntiAlias(true); 830496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mBackgroundPaint.setColor(resources.getColor(R.color.mode_icon_hover_highlight)); 840496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 850496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague setColor(color); 860496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 870496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 880496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague /** 890496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * Constructor 900496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * 910496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * @param resources Resources, needed to poke around for the background color value. 920496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague */ 930496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague public TouchCircleDrawable(Resources resources) { 940496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague this(resources, 0xffffff, 0xffffff); 950496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 960496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 970496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague /** 980496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * Set the size of this drawable. 990496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * 1000496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * @param w Width to set. 1010496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * @param h Height to set. 1020496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague */ 1030496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague public void setSize(int w, int h) { 1040496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mW = w; 1050496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mH = h; 1060496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 1070496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 1080496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague /** 1090496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * Set the center of the circle for this drawable. 1100496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * 1110496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * @param p The center point. 1120496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague */ 1130496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague public void setCenter(Point p) { 1140496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mCenter = p; 1150496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague updateIconBounds(); 1160496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 1170496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 1180496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague /** 1190496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * @return The center of this drawable. 1200496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague */ 1210496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague public Point getCenter() { 1220496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague return mCenter; 1230496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 1240496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 1250496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague @Override 1260496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague public void draw(Canvas canvas) { 1270496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague int w = mW; 1280496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague int h = mH; 1290496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 1300496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague if (w == INVALID || h == INVALID || mCenter == null) { 1310496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague return; 1320496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 1330496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 1340496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague if (mDrawBackground) { 1350496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague canvas.drawCircle(mCenter.x, mCenter.y, mBackgroundRadius, mBackgroundPaint); 1360496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 1370496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague canvas.drawCircle(mCenter.x, mCenter.y, mColorRadius, mColorPaint); 1380496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague if (mIconDrawable != null) { 1390496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mIconDrawable.draw(canvas); 1400496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 1410496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 1420496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 1430496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague @Override 1440496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague public void setAlpha(int alpha) { 1450496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mColorAlpha = alpha; 1460496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 1470496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 1480496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague @Override 1490496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague public void setColorFilter(ColorFilter cf) { 1500496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mColorPaint.setColorFilter(cf); 1510496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 1520496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 1530496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague @Override 1540496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague public int getOpacity() { 1550496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague return PixelFormat.TRANSLUCENT; 1560496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 1570496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 1580496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague /** 1590496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * Set the main color. 1600496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * 1610496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * @param color The main color. 1620496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague */ 1630496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague public void setColor(int color) { 1640496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mColor = color; 1650496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mColorPaint.setColor(mColor); 1660496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mColorPaint.setAlpha(mColorAlpha); 1670496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 1680496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 1690496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague public void setIconDrawable(Drawable d, int size) { 1700496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mIconDrawable = d; 1710496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mIconDrawableSize = size; 1720496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague updateIconBounds(); 1730496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 1740496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 1750496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague private void updateIconBounds() { 1760496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague if (mCenter != null) { 1770496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mIconDrawable.setBounds( 1780496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mCenter.x - mIconDrawableSize/2, mCenter.y - mIconDrawableSize/2, 1790496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mCenter.x + mIconDrawableSize/2, mCenter.y + mIconDrawableSize/2); 1800496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 1810496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 1820496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 1830496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague /** 1840496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * Start the expand animation. 1850496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague */ 1860496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague public void animate() { 1870496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mBackgroundRadius = Math.min(mW/2, mH/2); 1880496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 1890496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague final ValueAnimator colorAnimator = 1900496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague ValueAnimator.ofInt(0, Math.min(mW/2, mH/2)); 1910496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague colorAnimator.setDuration(CIRCLE_ANIM_DURATION_MS); 1920496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague colorAnimator.setInterpolator(Gusterpolator.INSTANCE); 1930496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague colorAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 1940496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague @Override 1950496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague public void onAnimationUpdate(ValueAnimator animation) { 1960496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mColorRadius = (Integer) animation.getAnimatedValue(); 1970496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague invalidateSelf(); 1980496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague if (mUpdateListener != null) { 1990496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mUpdateListener.onAnimationUpdate(animation); 2000496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 2010496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 2020496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague }); 2030496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 204955ae1f8afc9c4fb0905e0baece959efac9326f6Spike Sprague colorAnimator.addListener(new AnimatorListener() { 2050496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague @Override 2060496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague public void onAnimationStart(Animator animation) { 2070496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mDrawBackground = true; 2080496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 2090496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague if (mAnimatorListener != null) { 2100496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mAnimatorListener.onAnimationStart(animation); 2110496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 2120496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 2130496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 2140496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague @Override 2150496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague public void onAnimationEnd(Animator animation) { 2160496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mDrawBackground = false; 2170496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 2180496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague if (mAnimatorListener != null) { 2190496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mAnimatorListener.onAnimationEnd(animation); 2200496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 2210496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 2220496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 2230496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague @Override 2240496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague public void onAnimationCancel(Animator animation) { 2250496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mDrawBackground = false; 2260496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 2270496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague if (mAnimatorListener != null) { 2280496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mAnimatorListener.onAnimationCancel(animation); 2290496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 2300496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 2310496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 2320496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague @Override 2330496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague public void onAnimationRepeat(Animator animation) { 2340496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague if (mAnimatorListener != null) { 2350496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mAnimatorListener.onAnimationRepeat(animation); 2360496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 2370496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 2380496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague }); 239955ae1f8afc9c4fb0905e0baece959efac9326f6Spike Sprague 240955ae1f8afc9c4fb0905e0baece959efac9326f6Spike Sprague colorAnimator.start(); 2410496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 2420496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 2430496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague /** 2440496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * Reset this drawable to its initial, preanimated state. 2450496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague */ 2460496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague public void reset() { 247955ae1f8afc9c4fb0905e0baece959efac9326f6Spike Sprague mColorRadius = 0; 2480496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 2490496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 2500496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague /** 2510496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * Set an {@link android.animation.Animator.AnimatorListener} to be 2520496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * attached to the animation. 2530496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * 2540496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * @param listener The listener. 2550496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague */ 2560496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague public void setAnimatorListener(Animator.AnimatorListener listener) { 2570496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mAnimatorListener = listener; 2580496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 2590496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague 2600496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague /** 2610496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * Set an {@link android.animation.ValueAnimator} to be 2620496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * attached to the animation. 2630496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * 2640496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague * @param listener The listener. 2650496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague */ 2660496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague public void setUpdateListener(ValueAnimator.AnimatorUpdateListener listener) { 2670496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague mUpdateListener = listener; 2680496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague } 2690496fcaa51f88f6c753975473b971941e4090cfaSpike Sprague} 270