Loading packages/SystemUI/res/layout-sw600dp/navigation_bar.xml +3 −14 Original line number Diff line number Diff line Loading @@ -59,7 +59,6 @@ android:src="@drawable/ic_sysbar_back" systemui:keyCode="4" android:layout_weight="0" android:background="@drawable/ripple_drawable" android:contentDescription="@string/accessibility_back" /> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/home" Loading @@ -69,7 +68,6 @@ systemui:keyCode="3" systemui:keyRepeat="true" android:layout_weight="0" android:background="@drawable/ripple_drawable" android:contentDescription="@string/accessibility_home" /> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/recent_apps" Loading @@ -77,7 +75,6 @@ android:layout_height="match_parent" android:src="@drawable/ic_sysbar_recent" android:layout_weight="0" android:background="@drawable/ripple_drawable" android:contentDescription="@string/accessibility_recent" /> <Space Loading @@ -98,7 +95,6 @@ systemui:keyCode="82" android:visibility="invisible" android:contentDescription="@string/accessibility_menu" android:background="@drawable/ripple_drawable" /> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/ime_switcher" Loading @@ -108,8 +104,7 @@ android:scaleType="centerInside" android:src="@drawable/ic_ime_switcher_default" android:visibility="invisible" android:contentDescription="@string/accessibility_ime_switch_button" android:background="@drawable/ripple_drawable" /> android:contentDescription="@string/accessibility_ime_switch_button" /> </FrameLayout> </LinearLayout> Loading Loading @@ -205,7 +200,6 @@ android:src="@drawable/ic_sysbar_back" systemui:keyCode="4" android:layout_weight="0" android:background="@drawable/ripple_drawable" android:contentDescription="@string/accessibility_back" /> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/home" Loading @@ -215,7 +209,6 @@ systemui:keyCode="3" systemui:keyRepeat="true" android:layout_weight="0" android:background="@drawable/ripple_drawable" android:contentDescription="@string/accessibility_home" /> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/recent_apps" Loading @@ -223,7 +216,6 @@ android:layout_height="match_parent" android:src="@drawable/ic_sysbar_recent" android:layout_weight="0" android:background="@drawable/ripple_drawable" android:contentDescription="@string/accessibility_recent" /> <Space Loading @@ -243,9 +235,7 @@ android:src="@drawable/ic_sysbar_menu" systemui:keyCode="82" android:visibility="invisible" android:contentDescription="@string/accessibility_menu" android:background="@drawable/ripple_drawable" /> android:contentDescription="@string/accessibility_menu" /> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/ime_switcher" android:layout_width="@dimen/navigation_extra_key_width" Loading @@ -254,8 +244,7 @@ android:src="@drawable/ic_ime_switcher_default" android:visibility="invisible" android:contentDescription="@string/accessibility_ime_switch_button" android:scaleType="centerInside" android:background="@drawable/ripple_drawable" /> android:scaleType="centerInside" /> </FrameLayout> </LinearLayout> Loading packages/SystemUI/res/layout/navigation_bar.xml +2 −12 Original line number Diff line number Diff line Loading @@ -55,7 +55,6 @@ systemui:keyCode="4" android:layout_weight="0" android:scaleType="center" android:background="@drawable/ripple_drawable" android:contentDescription="@string/accessibility_back" /> <View Loading @@ -71,7 +70,6 @@ systemui:keyCode="3" systemui:keyRepeat="false" android:layout_weight="0" android:background="@drawable/ripple_drawable" android:contentDescription="@string/accessibility_home" /> <View Loading @@ -85,7 +83,6 @@ android:layout_height="match_parent" android:src="@drawable/ic_sysbar_recent" android:layout_weight="0" android:background="@drawable/ripple_drawable" android:contentDescription="@string/accessibility_recent" /> <FrameLayout Loading @@ -99,7 +96,6 @@ android:contentDescription="@string/accessibility_menu" android:src="@drawable/ic_sysbar_menu" android:visibility="invisible" android:background="@drawable/ripple_drawable" systemui:keyCode="82" /> <com.android.systemui.statusbar.policy.KeyButtonView Loading @@ -109,8 +105,7 @@ android:contentDescription="@string/accessibility_ime_switch_button" android:scaleType="centerInside" android:src="@drawable/ic_ime_switcher_default" android:visibility="invisible" android:background="@drawable/ripple_drawable" /> android:visibility="invisible" /> </FrameLayout> </LinearLayout> Loading Loading @@ -202,8 +197,7 @@ android:contentDescription="@string/accessibility_ime_switch_button" android:scaleType="centerInside" android:src="@drawable/ic_ime_switcher_default" android:visibility="invisible" android:background="@drawable/ripple_drawable" /> android:visibility="invisible" /> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu" Loading @@ -212,7 +206,6 @@ android:contentDescription="@string/accessibility_menu" android:src="@drawable/ic_sysbar_menu_land" android:visibility="invisible" android:background="@drawable/ripple_drawable" systemui:keyCode="82" /> </FrameLayout> Loading @@ -222,7 +215,6 @@ android:src="@drawable/ic_sysbar_recent_land" android:layout_weight="0" android:contentDescription="@string/accessibility_recent" android:background="@drawable/ripple_drawable" /> <View android:layout_height="match_parent" Loading @@ -238,7 +230,6 @@ systemui:keyRepeat="false" android:layout_weight="0" android:contentDescription="@string/accessibility_home" android:background="@drawable/ripple_drawable" /> <View android:layout_height="match_parent" Loading @@ -254,7 +245,6 @@ systemui:keyCode="4" android:layout_weight="0" android:contentDescription="@string/accessibility_back" android:background="@drawable/ripple_drawable" /> <View android:layout_height="40dp" Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java +122 −29 Original line number Diff line number Diff line Loading @@ -17,11 +17,15 @@ package com.android.systemui.statusbar.policy; import android.animation.Animator; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.TimeInterpolator; import android.app.ActivityManager; import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.RectF; import android.hardware.input.InputManager; import android.media.AudioManager; import android.os.Bundle; Loading @@ -34,10 +38,12 @@ import android.view.KeyCharacterMap; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.SoundEffectConstants; import android.view.View; import android.view.ViewConfiguration; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; import android.widget.ImageView; import java.lang.Math; import com.android.systemui.R; Loading @@ -50,15 +56,21 @@ public class KeyButtonView extends ImageView { // TODO: Get rid of this public static final float DEFAULT_QUIESCENT_ALPHA = 1f; public static final float MAX_ALPHA = 0.15f; public static final float GLOW_MAX_SCALE_FACTOR = 1.5f; private long mDownTime; private int mCode; private int mTouchSlop; private float mGlowAlpha = 0f; private float mGlowScale = 1f; private float mDrawingAlpha = 1f; private float mQuiescentAlpha = DEFAULT_QUIESCENT_ALPHA; private boolean mSupportsLongpress = true; private AnimatorSet mPressedAnim; private Animator mAnimateToQuiescent = new ObjectAnimator(); private Drawable mBackground; private Paint mRipplePaint; private final TimeInterpolator mInterpolator = (TimeInterpolator) new LogInterpolator(); private AudioManager mAudioManager; private final Runnable mCheckLongPress = new Runnable() { Loading Loading @@ -90,11 +102,6 @@ public class KeyButtonView extends ImageView { mSupportsLongpress = a.getBoolean(R.styleable.KeyButtonView_keyRepeat, true); Drawable d = getBackground(); if (d != null) { mBackground = d.mutate(); setBackground(mBackground); } setDrawingAlpha(mQuiescentAlpha); Loading Loading @@ -134,13 +141,45 @@ public class KeyButtonView extends ImageView { return super.performAccessibilityAction(action, arguments); } private Paint getRipplePaint() { if (mRipplePaint == null) { mRipplePaint = new Paint(); mRipplePaint.setAntiAlias(true); mRipplePaint.setColor(0xffffffff); } return mRipplePaint; } @Override protected void onDraw(Canvas canvas) { final Paint p = getRipplePaint(); p.setAlpha((int)(MAX_ALPHA * mDrawingAlpha * mGlowAlpha * 255)); final float w = getWidth(); final float h = getHeight(); final boolean horizontal = w > h; final float diameter = (horizontal ? w : h) * mGlowScale; final float radius = diameter * .5f; final float cx = w * .5f; final float cy = h * .5f; final float rx = horizontal ? radius : cx; final float ry = horizontal ? cy : radius; final float corner = horizontal ? cy : cx; canvas.drawRoundRect(cx - rx, cy - ry, cx + rx, cy + ry, corner, corner, p); super.onDraw(canvas); } public void setQuiescentAlpha(float alpha, boolean animate) { mAnimateToQuiescent.cancel(); alpha = Math.min(Math.max(alpha, 0), 1); if (alpha == mQuiescentAlpha && alpha == mDrawingAlpha) return; mQuiescentAlpha = alpha; if (DEBUG) Log.d(TAG, "New quiescent alpha = " + mQuiescentAlpha); if (mBackground != null && animate) { if (animate) { mAnimateToQuiescent = animateToQuiescent(); mAnimateToQuiescent.start(); } else { Loading @@ -162,34 +201,79 @@ public class KeyButtonView extends ImageView { public void setDrawingAlpha(float x) { setImageAlpha((int) (x * 255)); if (mBackground != null) { mBackground.setAlpha((int)(x * 255)); } mDrawingAlpha = x; } public float getGlowAlpha() { return mGlowAlpha; } public void setGlowAlpha(float x) { mGlowAlpha = x; invalidate(); } public float getGlowScale() { return mGlowScale; } public void setGlowScale(float x) { mGlowScale = x; final float w = getWidth(); final float h = getHeight(); if (GLOW_MAX_SCALE_FACTOR <= 1.0f) { // this only works if we know the glow will never leave our bounds invalidate(); } else { final float rx = (w * (GLOW_MAX_SCALE_FACTOR - 1.0f)) / 2.0f + 1.0f; final float ry = (h * (GLOW_MAX_SCALE_FACTOR - 1.0f)) / 2.0f + 1.0f; com.android.systemui.SwipeHelper.invalidateGlobalRegion( this, new RectF(getLeft() - rx, getTop() - ry, getRight() + rx, getBottom() + ry)); // also invalidate our immediate parent to help avoid situations where nearby glows // interfere ((View)getParent()).invalidate(); } } public void setPressed(boolean pressed) { if (mBackground != null) { if (pressed != isPressed()) { if (mPressedAnim != null && mPressedAnim.isRunning()) { mPressedAnim.cancel(); } final AnimatorSet as = mPressedAnim = new AnimatorSet(); final ObjectAnimator scaleAnimator = ObjectAnimator.ofFloat(this, "glowScale", GLOW_MAX_SCALE_FACTOR); scaleAnimator.setInterpolator(mInterpolator); if (pressed) { mGlowScale = 0f; if (mGlowAlpha < mQuiescentAlpha) mGlowAlpha = mQuiescentAlpha; setDrawingAlpha(1f); as.playTogether( ObjectAnimator.ofFloat(this, "glowAlpha", 1f), scaleAnimator ); as.setDuration(500); } else { mAnimateToQuiescent.cancel(); mAnimateToQuiescent = animateToQuiescent(); mAnimateToQuiescent.setDuration(500); mAnimateToQuiescent.start(); } as.playTogether( ObjectAnimator.ofFloat(this, "glowAlpha", mGlowAlpha, mGlowAlpha * .2f, 0f), scaleAnimator, mAnimateToQuiescent ); as.setDuration(500); } as.start(); } super.setPressed(pressed); } private void setHotspot(float x, float y) { if (mBackground != null) { mBackground.setHotspot(x, y); } } public boolean onTouchEvent(MotionEvent ev) { final int action = ev.getAction(); int x, y; Loading @@ -209,7 +293,6 @@ public class KeyButtonView extends ImageView { removeCallbacks(mCheckLongPress); postDelayed(mCheckLongPress, ViewConfiguration.getLongPressTimeout()); } setHotspot(ev.getX(), ev.getY()); break; case MotionEvent.ACTION_MOVE: x = (int)ev.getX(); Loading @@ -218,7 +301,6 @@ public class KeyButtonView extends ImageView { && x < getWidth() + mTouchSlop && y >= -mTouchSlop && y < getHeight() + mTouchSlop); setHotspot(ev.getX(), ev.getY()); break; case MotionEvent.ACTION_CANCEL: setPressed(false); Loading Loading @@ -272,6 +354,17 @@ public class KeyButtonView extends ImageView { InputManager.getInstance().injectInputEvent(ev, InputManager.INJECT_INPUT_EVENT_MODE_ASYNC); } /** * Interpolator with a smooth log deceleration */ private static final class LogInterpolator implements TimeInterpolator { @Override public float getInterpolation(float input) { return 1 - (float) Math.pow(400, -input * 1.4); } } } Loading
packages/SystemUI/res/layout-sw600dp/navigation_bar.xml +3 −14 Original line number Diff line number Diff line Loading @@ -59,7 +59,6 @@ android:src="@drawable/ic_sysbar_back" systemui:keyCode="4" android:layout_weight="0" android:background="@drawable/ripple_drawable" android:contentDescription="@string/accessibility_back" /> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/home" Loading @@ -69,7 +68,6 @@ systemui:keyCode="3" systemui:keyRepeat="true" android:layout_weight="0" android:background="@drawable/ripple_drawable" android:contentDescription="@string/accessibility_home" /> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/recent_apps" Loading @@ -77,7 +75,6 @@ android:layout_height="match_parent" android:src="@drawable/ic_sysbar_recent" android:layout_weight="0" android:background="@drawable/ripple_drawable" android:contentDescription="@string/accessibility_recent" /> <Space Loading @@ -98,7 +95,6 @@ systemui:keyCode="82" android:visibility="invisible" android:contentDescription="@string/accessibility_menu" android:background="@drawable/ripple_drawable" /> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/ime_switcher" Loading @@ -108,8 +104,7 @@ android:scaleType="centerInside" android:src="@drawable/ic_ime_switcher_default" android:visibility="invisible" android:contentDescription="@string/accessibility_ime_switch_button" android:background="@drawable/ripple_drawable" /> android:contentDescription="@string/accessibility_ime_switch_button" /> </FrameLayout> </LinearLayout> Loading Loading @@ -205,7 +200,6 @@ android:src="@drawable/ic_sysbar_back" systemui:keyCode="4" android:layout_weight="0" android:background="@drawable/ripple_drawable" android:contentDescription="@string/accessibility_back" /> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/home" Loading @@ -215,7 +209,6 @@ systemui:keyCode="3" systemui:keyRepeat="true" android:layout_weight="0" android:background="@drawable/ripple_drawable" android:contentDescription="@string/accessibility_home" /> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/recent_apps" Loading @@ -223,7 +216,6 @@ android:layout_height="match_parent" android:src="@drawable/ic_sysbar_recent" android:layout_weight="0" android:background="@drawable/ripple_drawable" android:contentDescription="@string/accessibility_recent" /> <Space Loading @@ -243,9 +235,7 @@ android:src="@drawable/ic_sysbar_menu" systemui:keyCode="82" android:visibility="invisible" android:contentDescription="@string/accessibility_menu" android:background="@drawable/ripple_drawable" /> android:contentDescription="@string/accessibility_menu" /> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/ime_switcher" android:layout_width="@dimen/navigation_extra_key_width" Loading @@ -254,8 +244,7 @@ android:src="@drawable/ic_ime_switcher_default" android:visibility="invisible" android:contentDescription="@string/accessibility_ime_switch_button" android:scaleType="centerInside" android:background="@drawable/ripple_drawable" /> android:scaleType="centerInside" /> </FrameLayout> </LinearLayout> Loading
packages/SystemUI/res/layout/navigation_bar.xml +2 −12 Original line number Diff line number Diff line Loading @@ -55,7 +55,6 @@ systemui:keyCode="4" android:layout_weight="0" android:scaleType="center" android:background="@drawable/ripple_drawable" android:contentDescription="@string/accessibility_back" /> <View Loading @@ -71,7 +70,6 @@ systemui:keyCode="3" systemui:keyRepeat="false" android:layout_weight="0" android:background="@drawable/ripple_drawable" android:contentDescription="@string/accessibility_home" /> <View Loading @@ -85,7 +83,6 @@ android:layout_height="match_parent" android:src="@drawable/ic_sysbar_recent" android:layout_weight="0" android:background="@drawable/ripple_drawable" android:contentDescription="@string/accessibility_recent" /> <FrameLayout Loading @@ -99,7 +96,6 @@ android:contentDescription="@string/accessibility_menu" android:src="@drawable/ic_sysbar_menu" android:visibility="invisible" android:background="@drawable/ripple_drawable" systemui:keyCode="82" /> <com.android.systemui.statusbar.policy.KeyButtonView Loading @@ -109,8 +105,7 @@ android:contentDescription="@string/accessibility_ime_switch_button" android:scaleType="centerInside" android:src="@drawable/ic_ime_switcher_default" android:visibility="invisible" android:background="@drawable/ripple_drawable" /> android:visibility="invisible" /> </FrameLayout> </LinearLayout> Loading Loading @@ -202,8 +197,7 @@ android:contentDescription="@string/accessibility_ime_switch_button" android:scaleType="centerInside" android:src="@drawable/ic_ime_switcher_default" android:visibility="invisible" android:background="@drawable/ripple_drawable" /> android:visibility="invisible" /> <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu" Loading @@ -212,7 +206,6 @@ android:contentDescription="@string/accessibility_menu" android:src="@drawable/ic_sysbar_menu_land" android:visibility="invisible" android:background="@drawable/ripple_drawable" systemui:keyCode="82" /> </FrameLayout> Loading @@ -222,7 +215,6 @@ android:src="@drawable/ic_sysbar_recent_land" android:layout_weight="0" android:contentDescription="@string/accessibility_recent" android:background="@drawable/ripple_drawable" /> <View android:layout_height="match_parent" Loading @@ -238,7 +230,6 @@ systemui:keyRepeat="false" android:layout_weight="0" android:contentDescription="@string/accessibility_home" android:background="@drawable/ripple_drawable" /> <View android:layout_height="match_parent" Loading @@ -254,7 +245,6 @@ systemui:keyCode="4" android:layout_weight="0" android:contentDescription="@string/accessibility_back" android:background="@drawable/ripple_drawable" /> <View android:layout_height="40dp" Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java +122 −29 Original line number Diff line number Diff line Loading @@ -17,11 +17,15 @@ package com.android.systemui.statusbar.policy; import android.animation.Animator; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.TimeInterpolator; import android.app.ActivityManager; import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.RectF; import android.hardware.input.InputManager; import android.media.AudioManager; import android.os.Bundle; Loading @@ -34,10 +38,12 @@ import android.view.KeyCharacterMap; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.SoundEffectConstants; import android.view.View; import android.view.ViewConfiguration; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; import android.widget.ImageView; import java.lang.Math; import com.android.systemui.R; Loading @@ -50,15 +56,21 @@ public class KeyButtonView extends ImageView { // TODO: Get rid of this public static final float DEFAULT_QUIESCENT_ALPHA = 1f; public static final float MAX_ALPHA = 0.15f; public static final float GLOW_MAX_SCALE_FACTOR = 1.5f; private long mDownTime; private int mCode; private int mTouchSlop; private float mGlowAlpha = 0f; private float mGlowScale = 1f; private float mDrawingAlpha = 1f; private float mQuiescentAlpha = DEFAULT_QUIESCENT_ALPHA; private boolean mSupportsLongpress = true; private AnimatorSet mPressedAnim; private Animator mAnimateToQuiescent = new ObjectAnimator(); private Drawable mBackground; private Paint mRipplePaint; private final TimeInterpolator mInterpolator = (TimeInterpolator) new LogInterpolator(); private AudioManager mAudioManager; private final Runnable mCheckLongPress = new Runnable() { Loading Loading @@ -90,11 +102,6 @@ public class KeyButtonView extends ImageView { mSupportsLongpress = a.getBoolean(R.styleable.KeyButtonView_keyRepeat, true); Drawable d = getBackground(); if (d != null) { mBackground = d.mutate(); setBackground(mBackground); } setDrawingAlpha(mQuiescentAlpha); Loading Loading @@ -134,13 +141,45 @@ public class KeyButtonView extends ImageView { return super.performAccessibilityAction(action, arguments); } private Paint getRipplePaint() { if (mRipplePaint == null) { mRipplePaint = new Paint(); mRipplePaint.setAntiAlias(true); mRipplePaint.setColor(0xffffffff); } return mRipplePaint; } @Override protected void onDraw(Canvas canvas) { final Paint p = getRipplePaint(); p.setAlpha((int)(MAX_ALPHA * mDrawingAlpha * mGlowAlpha * 255)); final float w = getWidth(); final float h = getHeight(); final boolean horizontal = w > h; final float diameter = (horizontal ? w : h) * mGlowScale; final float radius = diameter * .5f; final float cx = w * .5f; final float cy = h * .5f; final float rx = horizontal ? radius : cx; final float ry = horizontal ? cy : radius; final float corner = horizontal ? cy : cx; canvas.drawRoundRect(cx - rx, cy - ry, cx + rx, cy + ry, corner, corner, p); super.onDraw(canvas); } public void setQuiescentAlpha(float alpha, boolean animate) { mAnimateToQuiescent.cancel(); alpha = Math.min(Math.max(alpha, 0), 1); if (alpha == mQuiescentAlpha && alpha == mDrawingAlpha) return; mQuiescentAlpha = alpha; if (DEBUG) Log.d(TAG, "New quiescent alpha = " + mQuiescentAlpha); if (mBackground != null && animate) { if (animate) { mAnimateToQuiescent = animateToQuiescent(); mAnimateToQuiescent.start(); } else { Loading @@ -162,34 +201,79 @@ public class KeyButtonView extends ImageView { public void setDrawingAlpha(float x) { setImageAlpha((int) (x * 255)); if (mBackground != null) { mBackground.setAlpha((int)(x * 255)); } mDrawingAlpha = x; } public float getGlowAlpha() { return mGlowAlpha; } public void setGlowAlpha(float x) { mGlowAlpha = x; invalidate(); } public float getGlowScale() { return mGlowScale; } public void setGlowScale(float x) { mGlowScale = x; final float w = getWidth(); final float h = getHeight(); if (GLOW_MAX_SCALE_FACTOR <= 1.0f) { // this only works if we know the glow will never leave our bounds invalidate(); } else { final float rx = (w * (GLOW_MAX_SCALE_FACTOR - 1.0f)) / 2.0f + 1.0f; final float ry = (h * (GLOW_MAX_SCALE_FACTOR - 1.0f)) / 2.0f + 1.0f; com.android.systemui.SwipeHelper.invalidateGlobalRegion( this, new RectF(getLeft() - rx, getTop() - ry, getRight() + rx, getBottom() + ry)); // also invalidate our immediate parent to help avoid situations where nearby glows // interfere ((View)getParent()).invalidate(); } } public void setPressed(boolean pressed) { if (mBackground != null) { if (pressed != isPressed()) { if (mPressedAnim != null && mPressedAnim.isRunning()) { mPressedAnim.cancel(); } final AnimatorSet as = mPressedAnim = new AnimatorSet(); final ObjectAnimator scaleAnimator = ObjectAnimator.ofFloat(this, "glowScale", GLOW_MAX_SCALE_FACTOR); scaleAnimator.setInterpolator(mInterpolator); if (pressed) { mGlowScale = 0f; if (mGlowAlpha < mQuiescentAlpha) mGlowAlpha = mQuiescentAlpha; setDrawingAlpha(1f); as.playTogether( ObjectAnimator.ofFloat(this, "glowAlpha", 1f), scaleAnimator ); as.setDuration(500); } else { mAnimateToQuiescent.cancel(); mAnimateToQuiescent = animateToQuiescent(); mAnimateToQuiescent.setDuration(500); mAnimateToQuiescent.start(); } as.playTogether( ObjectAnimator.ofFloat(this, "glowAlpha", mGlowAlpha, mGlowAlpha * .2f, 0f), scaleAnimator, mAnimateToQuiescent ); as.setDuration(500); } as.start(); } super.setPressed(pressed); } private void setHotspot(float x, float y) { if (mBackground != null) { mBackground.setHotspot(x, y); } } public boolean onTouchEvent(MotionEvent ev) { final int action = ev.getAction(); int x, y; Loading @@ -209,7 +293,6 @@ public class KeyButtonView extends ImageView { removeCallbacks(mCheckLongPress); postDelayed(mCheckLongPress, ViewConfiguration.getLongPressTimeout()); } setHotspot(ev.getX(), ev.getY()); break; case MotionEvent.ACTION_MOVE: x = (int)ev.getX(); Loading @@ -218,7 +301,6 @@ public class KeyButtonView extends ImageView { && x < getWidth() + mTouchSlop && y >= -mTouchSlop && y < getHeight() + mTouchSlop); setHotspot(ev.getX(), ev.getY()); break; case MotionEvent.ACTION_CANCEL: setPressed(false); Loading Loading @@ -272,6 +354,17 @@ public class KeyButtonView extends ImageView { InputManager.getInstance().injectInputEvent(ev, InputManager.INJECT_INPUT_EVENT_MODE_ASYNC); } /** * Interpolator with a smooth log deceleration */ private static final class LogInterpolator implements TimeInterpolator { @Override public float getInterpolation(float input) { return 1 - (float) Math.pow(400, -input * 1.4); } } }