BarTransitions.java revision bd3bfc5285dcacff0a69fecf3baeeeb90d887a58
1e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock/* 2e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock * Copyright (C) 2013 The Android Open Source Project 3e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock * 4e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock * Licensed under the Apache License, Version 2.0 (the "License"); 5e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock * you may not use this file except in compliance with the License. 6e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock * You may obtain a copy of the License at 7e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock * 8e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock * http://www.apache.org/licenses/LICENSE-2.0 9e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock * 10e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock * Unless required by applicable law or agreed to in writing, software 11e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock * distributed under the License is distributed on an "AS IS" BASIS, 12e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock * See the License for the specific language governing permissions and 14e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock * limitations under the License. 15e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock */ 16e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock 17e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlockpackage com.android.systemui.statusbar.phone; 18e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock 1942197263bc08843ad18a8660887ef540c630c232John Spurlockimport android.animation.TimeInterpolator; 20e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlockimport android.app.ActivityManager; 2142197263bc08843ad18a8660887ef540c630c232John Spurlockimport android.content.Context; 22e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlockimport android.content.res.Resources; 2342197263bc08843ad18a8660887ef540c630c232John Spurlockimport android.graphics.Canvas; 2442197263bc08843ad18a8660887ef540c630c232John Spurlockimport android.graphics.Color; 2542197263bc08843ad18a8660887ef540c630c232John Spurlockimport android.graphics.ColorFilter; 2642197263bc08843ad18a8660887ef540c630c232John Spurlockimport android.graphics.PixelFormat; 2742197263bc08843ad18a8660887ef540c630c232John Spurlockimport android.graphics.Rect; 28e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlockimport android.graphics.drawable.Drawable; 2942197263bc08843ad18a8660887ef540c630c232John Spurlockimport android.os.SystemClock; 3027735a4ba50d42df64eb82acc3f64fa2d68fd505John Spurlockimport android.util.Log; 31e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlockimport android.view.View; 3242197263bc08843ad18a8660887ef540c630c232John Spurlockimport android.view.animation.LinearInterpolator; 33e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock 34e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlockimport com.android.systemui.R; 35e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock 36e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlockpublic class BarTransitions { 3727735a4ba50d42df64eb82acc3f64fa2d68fd505John Spurlock private static final boolean DEBUG = false; 38e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock private static final boolean DEBUG_COLORS = false; 39e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock 40fd0e6c0d6fd17c7a5949ae581bf2355268545fd4John Spurlock public static final boolean HIGH_END = ActivityManager.isHighEndGfx(); 41fd0e6c0d6fd17c7a5949ae581bf2355268545fd4John Spurlock 423b139a9ed06fdaad694ca97b8f99e7038007a054John Spurlock public static final int MODE_OPAQUE = 0; 4389835ddf327ef256b44d91cf1fd1898c0599eb48John Spurlock public static final int MODE_SEMI_TRANSPARENT = 1; 44bd95740648372449a4d5c164d7050eee352d4c24John Spurlock public static final int MODE_TRANSLUCENT = 2; 457edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock public static final int MODE_LIGHTS_OUT = 3; 46ea56251d92050e9a672d1f66d0d4621e4dd4136eAdrian Roos public static final int MODE_TRANSPARENT = 4; 470ff62e09116dd125fc36f7af5de7a0b60aaa789bJohn Spurlock public static final int MODE_WARNING = 5; 48c0f0a74762f7b3651d0fcd8371e9eb0c84779b1aAdrian Roos public static final int MODE_LIGHTS_OUT_TRANSPARENT = 6; 497edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 50e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock public static final int LIGHTS_IN_DURATION = 250; 51e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock public static final int LIGHTS_OUT_DURATION = 750; 52e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock public static final int BACKGROUND_DURATION = 200; 53e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock 5427735a4ba50d42df64eb82acc3f64fa2d68fd505John Spurlock private final String mTag; 55e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock private final View mView; 5642197263bc08843ad18a8660887ef540c630c232John Spurlock private final BarBackgroundDrawable mBarBackground; 57e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock 58e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock private int mMode; 593b139a9ed06fdaad694ca97b8f99e7038007a054John Spurlock 607057d2c3a9a88f1d221bc69780385bd20c5b4999John Spurlock public BarTransitions(View view, int gradientResourceId) { 61e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock mTag = "BarTransitions." + view.getClass().getSimpleName(); 62e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock mView = view; 6342197263bc08843ad18a8660887ef540c630c232John Spurlock mBarBackground = new BarBackgroundDrawable(mView.getContext(), gradientResourceId); 64fd0e6c0d6fd17c7a5949ae581bf2355268545fd4John Spurlock if (HIGH_END) { 6542197263bc08843ad18a8660887ef540c630c232John Spurlock mView.setBackground(mBarBackground); 66e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock } 67e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock } 68e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock 69b77edbfdab54531023c8bbea7d89b6cefc42096cJohn Spurlock public int getMode() { 70b77edbfdab54531023c8bbea7d89b6cefc42096cJohn Spurlock return mMode; 71b77edbfdab54531023c8bbea7d89b6cefc42096cJohn Spurlock } 72b77edbfdab54531023c8bbea7d89b6cefc42096cJohn Spurlock 733b139a9ed06fdaad694ca97b8f99e7038007a054John Spurlock public void transitionTo(int mode, boolean animate) { 74fd0e6c0d6fd17c7a5949ae581bf2355268545fd4John Spurlock // low-end devices do not support translucent modes, fallback to opaque 75ea56251d92050e9a672d1f66d0d4621e4dd4136eAdrian Roos if (!HIGH_END && (mode == MODE_SEMI_TRANSPARENT || mode == MODE_TRANSLUCENT 76ea56251d92050e9a672d1f66d0d4621e4dd4136eAdrian Roos || mode == MODE_TRANSPARENT)) { 77fd0e6c0d6fd17c7a5949ae581bf2355268545fd4John Spurlock mode = MODE_OPAQUE; 78fd0e6c0d6fd17c7a5949ae581bf2355268545fd4John Spurlock } 79c0f0a74762f7b3651d0fcd8371e9eb0c84779b1aAdrian Roos if (!HIGH_END && (mode == MODE_LIGHTS_OUT_TRANSPARENT)) { 80c0f0a74762f7b3651d0fcd8371e9eb0c84779b1aAdrian Roos mode = MODE_LIGHTS_OUT; 81c0f0a74762f7b3651d0fcd8371e9eb0c84779b1aAdrian Roos } 8289835ddf327ef256b44d91cf1fd1898c0599eb48John Spurlock if (mMode == mode) return; 8389835ddf327ef256b44d91cf1fd1898c0599eb48John Spurlock int oldMode = mMode; 84e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock mMode = mode; 85e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock if (DEBUG) Log.d(mTag, String.format("%s -> %s animate=%s", 86e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock modeToString(oldMode), modeToString(mode), animate)); 87fd0e6c0d6fd17c7a5949ae581bf2355268545fd4John Spurlock onTransition(oldMode, mMode, animate); 883b139a9ed06fdaad694ca97b8f99e7038007a054John Spurlock } 893b139a9ed06fdaad694ca97b8f99e7038007a054John Spurlock 903b139a9ed06fdaad694ca97b8f99e7038007a054John Spurlock protected void onTransition(int oldMode, int newMode, boolean animate) { 91fd0e6c0d6fd17c7a5949ae581bf2355268545fd4John Spurlock if (HIGH_END) { 92fd0e6c0d6fd17c7a5949ae581bf2355268545fd4John Spurlock applyModeBackground(oldMode, newMode, animate); 93fd0e6c0d6fd17c7a5949ae581bf2355268545fd4John Spurlock } 94e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock } 95e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock 96e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock protected void applyModeBackground(int oldMode, int newMode, boolean animate) { 9742197263bc08843ad18a8660887ef540c630c232John Spurlock if (DEBUG) Log.d(mTag, String.format("applyModeBackground oldMode=%s newMode=%s animate=%s", 9842197263bc08843ad18a8660887ef540c630c232John Spurlock modeToString(oldMode), modeToString(newMode), animate)); 9942197263bc08843ad18a8660887ef540c630c232John Spurlock mBarBackground.applyModeBackground(oldMode, newMode, animate); 10042197263bc08843ad18a8660887ef540c630c232John Spurlock } 10142197263bc08843ad18a8660887ef540c630c232John Spurlock 10242197263bc08843ad18a8660887ef540c630c232John Spurlock public static String modeToString(int mode) { 10342197263bc08843ad18a8660887ef540c630c232John Spurlock if (mode == MODE_OPAQUE) return "MODE_OPAQUE"; 10442197263bc08843ad18a8660887ef540c630c232John Spurlock if (mode == MODE_SEMI_TRANSPARENT) return "MODE_SEMI_TRANSPARENT"; 10542197263bc08843ad18a8660887ef540c630c232John Spurlock if (mode == MODE_TRANSLUCENT) return "MODE_TRANSLUCENT"; 10642197263bc08843ad18a8660887ef540c630c232John Spurlock if (mode == MODE_LIGHTS_OUT) return "MODE_LIGHTS_OUT"; 107ea56251d92050e9a672d1f66d0d4621e4dd4136eAdrian Roos if (mode == MODE_TRANSPARENT) return "MODE_TRANSPARENT"; 1080ff62e09116dd125fc36f7af5de7a0b60aaa789bJohn Spurlock if (mode == MODE_WARNING) return "MODE_WARNING"; 109c0f0a74762f7b3651d0fcd8371e9eb0c84779b1aAdrian Roos if (mode == MODE_LIGHTS_OUT_TRANSPARENT) return "MODE_LIGHTS_OUT_TRANSPARENT"; 11042197263bc08843ad18a8660887ef540c630c232John Spurlock throw new IllegalArgumentException("Unknown mode " + mode); 11142197263bc08843ad18a8660887ef540c630c232John Spurlock } 11242197263bc08843ad18a8660887ef540c630c232John Spurlock 11342197263bc08843ad18a8660887ef540c630c232John Spurlock public void finishAnimations() { 11442197263bc08843ad18a8660887ef540c630c232John Spurlock mBarBackground.finishAnimation(); 11542197263bc08843ad18a8660887ef540c630c232John Spurlock } 11642197263bc08843ad18a8660887ef540c630c232John Spurlock 117c0f0a74762f7b3651d0fcd8371e9eb0c84779b1aAdrian Roos protected boolean isLightsOut(int mode) { 118c0f0a74762f7b3651d0fcd8371e9eb0c84779b1aAdrian Roos return mode == MODE_LIGHTS_OUT || mode == MODE_LIGHTS_OUT_TRANSPARENT; 119c0f0a74762f7b3651d0fcd8371e9eb0c84779b1aAdrian Roos } 120c0f0a74762f7b3651d0fcd8371e9eb0c84779b1aAdrian Roos 12142197263bc08843ad18a8660887ef540c630c232John Spurlock private static class BarBackgroundDrawable extends Drawable { 12242197263bc08843ad18a8660887ef540c630c232John Spurlock private final int mOpaque; 12342197263bc08843ad18a8660887ef540c630c232John Spurlock private final int mSemiTransparent; 124ea56251d92050e9a672d1f66d0d4621e4dd4136eAdrian Roos private final int mTransparent; 1250ff62e09116dd125fc36f7af5de7a0b60aaa789bJohn Spurlock private final int mWarning; 12642197263bc08843ad18a8660887ef540c630c232John Spurlock private final Drawable mGradient; 12742197263bc08843ad18a8660887ef540c630c232John Spurlock private final TimeInterpolator mInterpolator; 12842197263bc08843ad18a8660887ef540c630c232John Spurlock 12942197263bc08843ad18a8660887ef540c630c232John Spurlock private int mMode = -1; 13042197263bc08843ad18a8660887ef540c630c232John Spurlock private boolean mAnimating; 13142197263bc08843ad18a8660887ef540c630c232John Spurlock private long mStartTime; 13242197263bc08843ad18a8660887ef540c630c232John Spurlock private long mEndTime; 13342197263bc08843ad18a8660887ef540c630c232John Spurlock 13442197263bc08843ad18a8660887ef540c630c232John Spurlock private int mGradientAlpha; 13542197263bc08843ad18a8660887ef540c630c232John Spurlock private int mColor; 13642197263bc08843ad18a8660887ef540c630c232John Spurlock 13742197263bc08843ad18a8660887ef540c630c232John Spurlock private int mGradientAlphaStart; 13842197263bc08843ad18a8660887ef540c630c232John Spurlock private int mColorStart; 13942197263bc08843ad18a8660887ef540c630c232John Spurlock 14042197263bc08843ad18a8660887ef540c630c232John Spurlock public BarBackgroundDrawable(Context context, int gradientResourceId) { 14142197263bc08843ad18a8660887ef540c630c232John Spurlock final Resources res = context.getResources(); 14242197263bc08843ad18a8660887ef540c630c232John Spurlock if (DEBUG_COLORS) { 14342197263bc08843ad18a8660887ef540c630c232John Spurlock mOpaque = 0xff0000ff; 14442197263bc08843ad18a8660887ef540c630c232John Spurlock mSemiTransparent = 0x7f0000ff; 145ea56251d92050e9a672d1f66d0d4621e4dd4136eAdrian Roos mTransparent = 0x2f0000ff; 1460ff62e09116dd125fc36f7af5de7a0b60aaa789bJohn Spurlock mWarning = 0xffff0000; 14742197263bc08843ad18a8660887ef540c630c232John Spurlock } else { 14842197263bc08843ad18a8660887ef540c630c232John Spurlock mOpaque = res.getColor(R.color.system_bar_background_opaque); 14942197263bc08843ad18a8660887ef540c630c232John Spurlock mSemiTransparent = res.getColor(R.color.system_bar_background_semi_transparent); 150ea56251d92050e9a672d1f66d0d4621e4dd4136eAdrian Roos mTransparent = res.getColor(R.color.system_bar_background_transparent); 151255dd04271088590fedc46c8e22b2fd4ab142d39Selim Cinek mWarning = res.getColor(com.android.internal.R.color.battery_saver_mode_color); 152e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock } 15342197263bc08843ad18a8660887ef540c630c232John Spurlock mGradient = res.getDrawable(gradientResourceId); 15442197263bc08843ad18a8660887ef540c630c232John Spurlock mInterpolator = new LinearInterpolator(); 155e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock } 15642197263bc08843ad18a8660887ef540c630c232John Spurlock 15742197263bc08843ad18a8660887ef540c630c232John Spurlock @Override 15842197263bc08843ad18a8660887ef540c630c232John Spurlock public void setAlpha(int alpha) { 15942197263bc08843ad18a8660887ef540c630c232John Spurlock // noop 16042197263bc08843ad18a8660887ef540c630c232John Spurlock } 16142197263bc08843ad18a8660887ef540c630c232John Spurlock 16242197263bc08843ad18a8660887ef540c630c232John Spurlock @Override 163bd3bfc5285dcacff0a69fecf3baeeeb90d887a58Chris Craik public void setColorFilter(ColorFilter colorFilter) { 16442197263bc08843ad18a8660887ef540c630c232John Spurlock // noop 16542197263bc08843ad18a8660887ef540c630c232John Spurlock } 16642197263bc08843ad18a8660887ef540c630c232John Spurlock 16742197263bc08843ad18a8660887ef540c630c232John Spurlock @Override 16842197263bc08843ad18a8660887ef540c630c232John Spurlock protected void onBoundsChange(Rect bounds) { 16942197263bc08843ad18a8660887ef540c630c232John Spurlock super.onBoundsChange(bounds); 17042197263bc08843ad18a8660887ef540c630c232John Spurlock mGradient.setBounds(bounds); 17142197263bc08843ad18a8660887ef540c630c232John Spurlock } 17242197263bc08843ad18a8660887ef540c630c232John Spurlock 17342197263bc08843ad18a8660887ef540c630c232John Spurlock public void applyModeBackground(int oldMode, int newMode, boolean animate) { 17442197263bc08843ad18a8660887ef540c630c232John Spurlock if (mMode == newMode) return; 17542197263bc08843ad18a8660887ef540c630c232John Spurlock mMode = newMode; 17642197263bc08843ad18a8660887ef540c630c232John Spurlock mAnimating = animate; 177b77edbfdab54531023c8bbea7d89b6cefc42096cJohn Spurlock if (animate) { 17842197263bc08843ad18a8660887ef540c630c232John Spurlock long now = SystemClock.elapsedRealtime(); 17942197263bc08843ad18a8660887ef540c630c232John Spurlock mStartTime = now; 18042197263bc08843ad18a8660887ef540c630c232John Spurlock mEndTime = now + BACKGROUND_DURATION; 18142197263bc08843ad18a8660887ef540c630c232John Spurlock mGradientAlphaStart = mGradientAlpha; 18242197263bc08843ad18a8660887ef540c630c232John Spurlock mColorStart = mColor; 183b77edbfdab54531023c8bbea7d89b6cefc42096cJohn Spurlock } 18442197263bc08843ad18a8660887ef540c630c232John Spurlock invalidateSelf(); 1853b139a9ed06fdaad694ca97b8f99e7038007a054John Spurlock } 18689835ddf327ef256b44d91cf1fd1898c0599eb48John Spurlock 18742197263bc08843ad18a8660887ef540c630c232John Spurlock @Override 18842197263bc08843ad18a8660887ef540c630c232John Spurlock public int getOpacity() { 18942197263bc08843ad18a8660887ef540c630c232John Spurlock return PixelFormat.TRANSLUCENT; 19042197263bc08843ad18a8660887ef540c630c232John Spurlock } 1915b9145bf990a9bbf4fdef1739e61ff8c70ec868fJohn Spurlock 19242197263bc08843ad18a8660887ef540c630c232John Spurlock public void finishAnimation() { 19342197263bc08843ad18a8660887ef540c630c232John Spurlock if (mAnimating) { 19442197263bc08843ad18a8660887ef540c630c232John Spurlock mAnimating = false; 19542197263bc08843ad18a8660887ef540c630c232John Spurlock invalidateSelf(); 19642197263bc08843ad18a8660887ef540c630c232John Spurlock } 1975b9145bf990a9bbf4fdef1739e61ff8c70ec868fJohn Spurlock } 19827735a4ba50d42df64eb82acc3f64fa2d68fd505John Spurlock 19942197263bc08843ad18a8660887ef540c630c232John Spurlock @Override 20042197263bc08843ad18a8660887ef540c630c232John Spurlock public void draw(Canvas canvas) { 20142197263bc08843ad18a8660887ef540c630c232John Spurlock int targetGradientAlpha = 0, targetColor = 0; 2020ff62e09116dd125fc36f7af5de7a0b60aaa789bJohn Spurlock if (mMode == MODE_WARNING) { 2030ff62e09116dd125fc36f7af5de7a0b60aaa789bJohn Spurlock targetColor = mWarning; 2040ff62e09116dd125fc36f7af5de7a0b60aaa789bJohn Spurlock } else if (mMode == MODE_TRANSLUCENT) { 205ea56251d92050e9a672d1f66d0d4621e4dd4136eAdrian Roos targetColor = mSemiTransparent; 20642197263bc08843ad18a8660887ef540c630c232John Spurlock } else if (mMode == MODE_SEMI_TRANSPARENT) { 20742197263bc08843ad18a8660887ef540c630c232John Spurlock targetColor = mSemiTransparent; 208c0f0a74762f7b3651d0fcd8371e9eb0c84779b1aAdrian Roos } else if (mMode == MODE_TRANSPARENT || mMode == MODE_LIGHTS_OUT_TRANSPARENT) { 209ea56251d92050e9a672d1f66d0d4621e4dd4136eAdrian Roos targetColor = mTransparent; 21042197263bc08843ad18a8660887ef540c630c232John Spurlock } else { 21142197263bc08843ad18a8660887ef540c630c232John Spurlock targetColor = mOpaque; 21242197263bc08843ad18a8660887ef540c630c232John Spurlock } 21342197263bc08843ad18a8660887ef540c630c232John Spurlock if (!mAnimating) { 21442197263bc08843ad18a8660887ef540c630c232John Spurlock mColor = targetColor; 21542197263bc08843ad18a8660887ef540c630c232John Spurlock mGradientAlpha = targetGradientAlpha; 21642197263bc08843ad18a8660887ef540c630c232John Spurlock } else { 21742197263bc08843ad18a8660887ef540c630c232John Spurlock final long now = SystemClock.elapsedRealtime(); 21842197263bc08843ad18a8660887ef540c630c232John Spurlock if (now >= mEndTime) { 21942197263bc08843ad18a8660887ef540c630c232John Spurlock mAnimating = false; 22042197263bc08843ad18a8660887ef540c630c232John Spurlock mColor = targetColor; 22142197263bc08843ad18a8660887ef540c630c232John Spurlock mGradientAlpha = targetGradientAlpha; 22242197263bc08843ad18a8660887ef540c630c232John Spurlock } else { 22342197263bc08843ad18a8660887ef540c630c232John Spurlock final float t = (now - mStartTime) / (float)(mEndTime - mStartTime); 22442197263bc08843ad18a8660887ef540c630c232John Spurlock final float v = Math.max(0, Math.min(mInterpolator.getInterpolation(t), 1)); 22542197263bc08843ad18a8660887ef540c630c232John Spurlock mGradientAlpha = (int)(v * targetGradientAlpha + mGradientAlphaStart * (1 - v)); 22642197263bc08843ad18a8660887ef540c630c232John Spurlock mColor = Color.argb( 22742197263bc08843ad18a8660887ef540c630c232John Spurlock (int)(v * Color.alpha(targetColor) + Color.alpha(mColorStart) * (1 - v)), 22842197263bc08843ad18a8660887ef540c630c232John Spurlock (int)(v * Color.red(targetColor) + Color.red(mColorStart) * (1 - v)), 22942197263bc08843ad18a8660887ef540c630c232John Spurlock (int)(v * Color.green(targetColor) + Color.green(mColorStart) * (1 - v)), 23042197263bc08843ad18a8660887ef540c630c232John Spurlock (int)(v * Color.blue(targetColor) + Color.blue(mColorStart) * (1 - v))); 23142197263bc08843ad18a8660887ef540c630c232John Spurlock } 23242197263bc08843ad18a8660887ef540c630c232John Spurlock } 23342197263bc08843ad18a8660887ef540c630c232John Spurlock if (mGradientAlpha > 0) { 23442197263bc08843ad18a8660887ef540c630c232John Spurlock mGradient.setAlpha(mGradientAlpha); 23542197263bc08843ad18a8660887ef540c630c232John Spurlock mGradient.draw(canvas); 23642197263bc08843ad18a8660887ef540c630c232John Spurlock } 23742197263bc08843ad18a8660887ef540c630c232John Spurlock if (Color.alpha(mColor) > 0) { 23842197263bc08843ad18a8660887ef540c630c232John Spurlock canvas.drawColor(mColor); 23942197263bc08843ad18a8660887ef540c630c232John Spurlock } 24042197263bc08843ad18a8660887ef540c630c232John Spurlock if (mAnimating) { 24142197263bc08843ad18a8660887ef540c630c232John Spurlock invalidateSelf(); // keep going 24242197263bc08843ad18a8660887ef540c630c232John Spurlock } 24342197263bc08843ad18a8660887ef540c630c232John Spurlock } 24427735a4ba50d42df64eb82acc3f64fa2d68fd505John Spurlock } 245e932e30eadb5978591316ffe3d21d60604c0cd91John Spurlock} 246